几乎每一个app都会有时间显示这一功能,但这一功能相对于其他的功能逻辑来说只是九牛一毛。那如何高效的搞定这一不重要但又必须实现的功能,是你提升逼格的一个基础点。提高逼格,从下面内容开始:
思路:
- 创建一个世界管理类:DateFormatter
- 给这个类实现一个单例:sharedFormatter
- 给这个类添加对应时间格式类的属性:NSDateFormatter()
- 初始化这些格式属性
- 调用
干货:
第 1 步:创建一个世界管理类:DateFormatter
class DateFormatter {}
第 2 步:给这个类实现一个单例:sharedFormatter
class DateFormatter { // 做成单例 static let sharedFormatter = DateFormatter() }
第 3 步:给这个类添加对应时间格式类的属性:NSDateFormatter()
1 // 第一步 2 class DateFormatter { 3 // 第二步 做成单例 4 static let sharedFormatter = DateFormatter() 5 6 // 第三步 时间格式属性:NSDateFormatter 类型 7 8 let rfc3339 = NSDateFormatter() // 最全时间格式 ("yyyy-MM-dd'T'HH:mm:ssZZZZZ") 9 let completeDatetime = NSDateFormatter() // 年-月-日 周 时:分:秒("yyyy-MM-dd (EEE) HH:mm") 10 11 let timeZH = NSDateFormatter() // 中式: 月 日 时 分 上下午("MMMd日 HH:mm a") 12 let timeEN = NSDateFormatter() // 英式:周 月 日,时 分 上下午("EEE, MMM dd, HH:mm a") 13 14 let timeDate = NSDateFormatter() // 年-月-日("yyyy-MM-dd") 15 let timeHour = NSDateFormatter() // HH:mm("HH:mm") 16 let timeMinute = NSDateFormatter() // HH:mm:ss("HH:mm:ss") 17 }
第 4 步:初始化这些格式属性
1 // 第一步 2 class DateFormatter { 3 // 第二步 做成单例 4 static let sharedFormatter = DateFormatter() 5 6 // 第三步 时间格式属性:NSDateFormatter 类型 7 8 let rfc3339 = NSDateFormatter() // 最全时间格式 ("yyyy-MM-dd'T'HH:mm:ssZZZZZ") 9 let time = NSDateFormatter() // 年-月-日 周 时:分:秒("yyyy-MM-dd (EEE) HH:mm") 10 11 let timeZH = NSDateFormatter() // 中式: 月 日 时 分 上下午("MMMd日 HH:mm a") 12 let timeEN = NSDateFormatter() // 英式:周 月 日,时 分 上下午("EEE, MMM dd, HH:mm a") 13 14 let timeDate = NSDateFormatter() // 年-月-日("yyyy-MM-dd") 15 let timeHour = NSDateFormatter() // HH:mm("HH:mm") 16 let timeMinute = NSDateFormatter() // HH:mm:ss("HH:mm:ss") 17 18 // 第四步 初始化 19 init() { 20 21 rfc3339.locale = NSLocale(localeIdentifier: "en_US_POSIX") // 时间本地化 22 rfc3339.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" // 格式 23 rfc3339.timeZone = NSTimeZone(forSecondsFromGMT: 0) // 时区 24 25 // 不设置时间本地化,默认是手机系统的时间显示 26 time.dateFormat = "yyyy-MM-dd (EEE) HH:mm" 27 28 timeZH.locale = NSLocale(localeIdentifier: "zh_CN") 29 timeZH.dateFormat = "MMMd日 HH:mm a" 30 31 timeEN.locale = NSLocale(localeIdentifier: "en_US") 32 timeEN.dateFormat = "EEE, MMM dd, HH:mm a" 33 34 timeDate.dateFormat = "yyyy-MM-dd" 35 timeHour.dateFormat = "HH:mm" 36 timeMinute.dateFormat = "HH:mm:ss" 37 38 // 部分说明:"en_US_POSIX" 与 "en_US" 的选择 39 // "en_US_POSIX" 适用的范围比 "en_US"广,如果与后台交互让"字符串"与"时间"转换建议选择"en_US_POSIX" 40 // Apple 官网解释:“en_US_POSIX” is also invariant in time (if the US, at some point in the future, changes the way it formats dates, “en_US” will change to reflect the new behaviour, but “en_US_POSIX” will not), and between machines (“en_US_POSIX” works the same on iPhone OS as it does on Mac OS X, and as it it does on other platforms). 41 } 42 }
第 5 步:应用
// rfc3339 格式 let str = DateFormatter.sharedFormatter.rfc3339.stringFromDate(NSDate()) print(str) // "2016-08-17T14:38:51Z" // time let str = DateFormatter.sharedFormatter.time.stringFromDate(NSDate()) print(str) // "2016-08-17 (Wed) 22:39" // timeZH let str = DateFormatter.sharedFormatter.timeZH.stringFromDate(NSDate()) print(str) // "8月17日 22:39 下午" // timeEN let str = DateFormatter.sharedFormatter.timeEN.stringFromDate(NSDate()) print(str) // "Wed, Aug 17, 22:40 PM" // timeDate let str = DateFormatter.sharedFormatter.timeDate.stringFromDate(NSDate()) print(str) // "2016-08-17" // timeHour let str = DateFormatter.sharedFormatter.timeHour.stringFromDate(NSDate()) print(str) // "22:40" // timeMinute let str = DateFormatter.sharedFormatter.timeMinute.stringFromDate(NSDate()) print(str) // "22:40:58"