Swift:如何创建日期时间戳和格式为ISO 8601,RFC 3339,UTC时区?

如何生成日期时间戳,使用 ISO 8601RFC 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答案这个。

最有希望的课程是NSDateNSDateFormatterNSTimeZone

相关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
extension 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"
}

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...