加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 06:07:21 所属栏目:百科 来源:网络整理
导读:如何生成日期时间戳,使用 ISO 8601和 RFC 3339的格式标准? 目标是一个字符串,看起来像这样: "2015-01-01T00:00:00.000Z" 格式: 年,月,日,作为“XXXX-XX-XX” 字母“T”作为分隔符 小时,分钟,秒,毫秒,作为“XX:XX:XX.XXX”。 字母“Z”作为零偏
如何生成日期时间戳,使用 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答案这个。

最有希望的课程是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"
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读