如何生成日期时间戳,使用
ISO 8601和
RFC 3339的格式标准?
目标是一个字符串,看起来像这样:
"2015-01-01T00:00:00.000Z"
格式:
>年,月,日,作为“XXXX-XX-XX”
>字母“T”作为分隔符
>小时,分钟,秒,毫秒,作为“XX:XX:XX.XXX”。
>字母“Z”作为零偏移的区域标记,a.k.a. UTC,GMT,祖鲁时间。
最佳案例:
> Swift源代码简单,简单,直观。
>无需使用任何额外的框架,子项目,cocoapod,C代码等。
我搜索StackOverflow,谷歌,苹果等,并没有找到一个Swift答案这个。
最有希望的课程是NSDate
,NSDateFormatter
,NSTimeZone
。
相关Q& A:How do I get ISO 8601 date in iOS?
这是我到目前为止最好的:
var now = NSDate() var formatter = NSDateFormatter() formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0) println(formatter.stringFromDate(now))
Xcode 8.2•Swift 3.0.2
原文链接:https://www.f2er.com/swift/321203.htmlextension Date { static let iso8601Formatter: DateFormatter = { let formatter = DateFormatter() formatter.calendar = Calendar(identifier: .iso8601) formatter.locale = Locale(identifier: "en_US_POSIX") formatter.timeZone = TimeZone(secondsFromGMT: 0) formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX" return formatter }() var iso8601: String { return Date.iso8601Formatter.string(from: self) } } extension String { var dateFromISO8601: Date? { return Date.iso8601Formatter.date(from: self) } }
用法:
let stringFromDate = Date().iso8601 // "2016-06-18T05:18:27.935Z" if let dateFromString = stringFromDate.dateFromISO8601 { print(dateFromString.iso8601) // "2016-06-18T05:18:27.935Z" }
Xcode 7.3.1•Swift 2.2.1
extension NSDate { struct Formatter { static let iso8601: NSDateFormatter = { let formatter = NSDateFormatter() formatter.calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierISO8601) formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0) formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX" return formatter }() } var iso8601: String { return Formatter.iso8601.stringFromDate(self) } } extension String { var dateFromISO8601: NSDate? { return NSDate.Formatter.iso8601.dateFromString(self) } }
用法:
let stringFromDate = NSDate().iso8601 // "2016-06-18T05:18:27.935Z" if let dateFromString = stringFromDate.dateFromISO8601 { print(dateFromString.iso8601) // "2016-06-18T05:18:27.935Z" }