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

Swift - Converting JSON date to Swift compatible date

本文关键字:日期 Swift JSON 转换      更新时间:2023-09-26

我试图转换一个日期,其中javascript代码正在使用date()函数生成当前日期。但是当我打印出来的时候,我得到的是nil

我代码:

        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.066ZDate =>打印nilSTR仅用于测试,并且工作完美。

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

问题是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"
}

以后每个文档使用ISO8601DateFormatter

在macOS 10.12及以上版本或iOS 10及以上版本中,请使用ISO8601DateFormatter类在使用ISO8601日期时表示。

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

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