微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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"
}

原文地址:https://www.jb51.cc/swift/321203.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐