如何在 swift 中将 UNIX 纪元转换为 ISO 8601?

How do I translate a UNIX epoch to ISO 8601 in swift?

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

我了解如何使用 'timeIntervalSince1970' (Get Unix Epoch Time in Swift) 获取纪元,其中 returns 类似于“1427058740.08374”,但如何将其转换为 ISO 8601?

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

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"

@LeoDabus在Swift4的精彩回答:

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"

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