Swift - 将 JSON 日期转换为 Swift 兼容日期

Swift - Converting JSON date to Swift compatible date

我正在尝试转换 javascript 代码使用 Date() 函数生成当前日期的日期。但是当我打印出来时,我得到的是零。

我的代码:

        let date2 = data?[0] as! String
        println(date2)

        var str = "2013-07-21T19:32:00Z"

        var dateFor: NSDateFormatter = NSDateFormatter()
        dateFor.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"

        var Date: NSDate? = dateFor.dateFromString(date2)

        println(Date) 

date2 => 正在打印 2015-05-15T21:58:00.066Z 日期 => 正在打印 nil str 仅用于测试并完美运行。

有人看到代码中的任何缺陷吗?

问题是 strdate2 两者的日期格式不同。 str 格式为 "yyyy-MM-dd'T'HH:mm:ssZ"date2 格式为 "yyyy-MM-dd'T'HH:mm:ss.SSSZ"。除此之外,在解析固定格式日期时,您应该始终将 dateFormatter 的语言环境设置为 "en_US_POSIX"

let date2 = "2015-05-15T21:58:00.066Z"

let dateFormatter = DateFormatter()
dateFormatter.locale = .init(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
if let date = dateFormatter.date(from: date2) {
    print(date)  // "2015-05-15 21:58:00 +0000"
}

Swift 4+

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
let str = "2013-07-21T19:32:00Z"

if let date = dateFormatter.date(from: str) {
    print(date)
}

输出: 2013-07-21 19:32:00 +0000

以后每 documentation 使用 ISO8601DateFormatter

In macOS 10.12 and later or iOS 10 and later, use the ISO8601DateFormatter class when working with ISO 8601 date representations.

import Foundation

let isoStr = "2020-02-18T11:40:01.000Z"

let isoDateFormatter = ISO8601DateFormatter()
isoDateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
isoDateFormatter.formatOptions = [
    .withFullDate,
    .withFullTime,
    .withDashSeparatorInDate,
    .withFractionalSeconds]

if let isoDateFormatted = isoDateFormatter.date(from: isoStr) {
    print(isoDateFormatted)
}