特性五、Swift日期格式处理

本文详细介绍了如何在Swift中处理日期格式,包括年、月、日、星期、小时、分钟、秒等各个部分的格式化规则,并给出了具体的示例,帮助开发者更好地理解和应用日期格式化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、在平时的开发中我们会遇到很多和时间有关的处理,比如App中显示一天微博的发布时间 、个人信息等等。
下面以微博日期格式为例:
Sun May 24 12:12:00 +0800 2015
星期 月 日 时:分:秒 时区 年
这种合适的时间是我们最常见的时间,但是 它对于大多数来说是没有任何意思的 。我们要从一个字符串中解析得到准确的时间必须要指定正确的格式字符串,以及对应的时区标示。

日期格式:

y 将年份 (0-9) 显示为不带前导零的数字
yy 以带前导零的两位数字格式显示年份
yyy 以四位数字格式显示年份
yyyy 以四位数字格式显示年份

M 将月份显示为不带前导零的数字(如一月表示为 1)
MM 将月份显示为带前导零的数字(例如 01/12/01)
MMM 将月份显示为缩写形式(例如 Jan)
MMMM 将月份显示为完整月份名(例如 January)
一月 Jan January
二月 Feb February
三月 Mar March
四月 Apr April
五月 May May
六月 Jun June
七月 Jul July
八月 Aug August
九月 Sep September
十月 Oct October
十一月 Nov November
十二月 Dec December

d 将日显示为不带前导零的数字(如 1)
dd 将日显示为带前导零的数字(如 01)
星期
EEE 将日显示为缩写形式(例如 Sun)
EEEE 将日显示为全名(例如 Sunday)
星期一 Mon Monday
星期二 Tue Tuesday
星期三 Wed Wednesday
星期四 Thu Thursday
星期五 Fri Friday
星期六 Sat Saturday
星期天 Sun Sunday
小时
h 使用 12 小时制将小时显示为不带前导零的数字(例如 1:15:15 PM)
hh 使用 12 小时制将小时显示为带前导零的数字(例如 01:15:15 PM)
H 使用 24 小时制将小时显示为不带前导零的数字(例如 1:15:15)
HH 使用 24 小时制将小时显示为带前导零的数字(例如 01:15:15)
分钟
m 将分钟显示为不带前导零的数字(例如 12:1:15)
mm 将分钟显示为带前导零的数字(例如 12:01:15)

s 将秒显示为不带前导零的数字(例如 12:15:5)
ss 将秒显示为带前导零的数字(例如 12:15:05)
f 显示秒的小数部分
ff 将精确显示到百分之一秒
ffff 将精确显示到万分之一秒
用户定义格式中最多可使用七个 f 符号
上午&下午
t 使用 12 小时制
中午之前任一小时显示大写的 A
中午到 11:59 PM 之间的任一小时显示大写的 P
tt 对于使用 12 小时制的区域设置
中午之前任一小时显示大写的 AM
中午到 11:59 PM 之间的任一小时显示大写的 PM
对于使用 24 小时制的区域设置,不显示任何字符
时区
z 显示不带前导零的时区偏移量
zz 显示带前导零的时区偏移量(例如 -08)
zzz 显示完整的时区偏移量(例如 -0800)
纪元
gg 显示时代/纪元字符串(例如 A.D.)

实例:微博日期处理的分类

extension NSDate{

    class func sinaDate(string: String) -> NSDate?{

        //转换日期
        let df = NSDateFormatter()

        df.locale = NSLocale(localeIdentifier: "en")

        df.dateFormat = "EEE MMM dd HH:mm:ss zzz yyyy"

        //转换
        return df.dateFromString(string)
    }

    //根据判断  获取不同时间段的称呼
    var dateDesctiption: String {
        //1、使用日历类取出当前的日期
        let calendar = NSCalendar.currentCalendar()

        //判断
        if calendar.isDateInToday(self){
            //把获取的日期和现在的系统时进行比较,判断时间差

            let dateTime = Int(NSDate().timeIntervalSinceDate(self))

            if dateTime < 60 {
                return "��刚刚"
            }

            if dateTime < 3600 {
                return "��\(dateTime / 60)分钟前"
            }
            return "��\(dateTime / 3600)小时前"
        }

        //日格式字符串
        var fmtString = "HH:mm"

        if calendar.isDateInYesterday(self){
            fmtString = "昨天" + fmtString
        }else{

            fmtString = "MM-dd" + fmtString
            let coms = calendar.components(NSCalendarUnit.Year, fromDate: self, toDate: NSDate(), options: NSCalendarOptions(rawValue: 0))
            if coms.year > 0{
                fmtString = "yyyy-" + fmtString
            }
        }
        let df = NSDateFormatter()
        df.locale = NSLocale(localeIdentifier: "en")
        df.dateFormat = fmtString

        return df.stringFromDate(self)
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值