【问题标题】:How do I translate a UNIX epoch to ISO 8601 in swift?如何快速将 UNIX 纪元转换为 ISO 8601?
【发布时间】:2015-03-22 21:25:16
【问题描述】:

我看到有人问如何在 Swift 中将 ISO 8601 字符串转换为 NSDate,但我需要完全相反的方法。

我了解如何使用“timeIntervalSince1970”(Get Unix Epoch Time in Swift) 来获取纪元,它返回类似于“1427058740.08374”的内容,但是如何将其转换为 ISO 8601?

所需字符串:2015-03-22T20:51:41+00:00

【问题讨论】:

标签: swift epoch


【解决方案1】:
extension NSDate {
    var formattedISO8601: String {
        let formatter = NSDateFormatter()
        formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)
        formatter.dateFormat = "yyyy-MM-dd'T'hh:mm:SSxxxxx"   //+00:00
        return formatter.stringFromDate(self)
    }
}

NSDate(timeIntervalSince1970: 1427058740.08374).formattedISO8601   // "2015-03-22T09:12:08+00:00"

【讨论】:

    【解决方案2】:

    @LeoDabus 在 Swift 4 中的精彩回答:

    extension NSDate {
        var formattedISO8601: String {
            let formatter = DateFormatter()
            formatter.timeZone = NSTimeZone(forSecondsFromGMT: 0) as TimeZone!
            formatter.dateFormat = "yyyy-MM-dd'T'hh:mm:SSxxxxx"   //+00:00
            return formatter.string(from: self as Date)
        }
    }
    

    并使用它:

    NSDate(timeIntervalSince1970: 1427058740.08374).formattedISO8601   // "2015-03-22T09:12:08+00:00"
    

    【讨论】:

      【解决方案3】:

      斯威夫特 5

      如果您的目标是 iOS 11.0+ / macOS 10.13+,您只需使用 ISO8601DateFormatterwithInternetDateTime 选项,如下所示:

      let unixTime = 1583358247
      
      let date = Date(timeIntervalSince1970: TimeInterval(unixTime))
      let iso8601DateFormatter = ISO8601DateFormatter()
      iso8601DateFormatter.formatOptions = [.withInternetDateTime]
      let string = iso8601DateFormatter.string(from: date)
      
      // string looks like "2020-03-04T21:44:07Z"
      

      【讨论】:

        猜你喜欢
        • 2019-01-13
        • 2012-02-13
        • 1970-01-01
        • 2019-05-12
        • 2013-07-07
        • 2017-12-20
        • 2011-04-16
        • 2017-12-06
        相关资源
        最近更新 更多