Swift - 将JSON日期转换为适用于Swift的日期

3

我正在尝试转换一个日期,其中JavaScript代码使用Date()函数生成当前日期。但是当我打印它时,得到的是null。

我的代码:

        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 Date => 打印nil str仅用于测试,运行正常。

有人发现代码中的缺陷吗?

3个回答

18
问题在于strdate2两者的日期格式不同。 str的格式是"yyyy-MM-dd'T'HH:mm:ssZ",而date2的格式是"yyyy-MM-dd'T'HH:mm:ss.SSSZ"。此外,在解析固定格式日期时,您应始终将日期格式化程序的语言环境设置为"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"
}

1

以后请使用ISO8601DateFormatter类,参见文档

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

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

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接