首页 > 解决方案 > 当没有毫秒时,将字符串格式化为日期对象返回 nil

问题描述

我正在解析一些通过 JSON 发送的日期,直到今天它一直运行良好。我正在使用此答案中的代码:

extension Formatter {
    static let iso8601: DateFormatter = {
        let formatter = DateFormatter()
        formatter.calendar = Calendar(identifier: .iso8601)
        formatter.locale = Locale(identifier: "en_US_POSIX")
        formatter.timeZone = TimeZone(secondsFromGMT: 0)
        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
        return formatter
    }()
}


extension String {
    var dateFromISO8601: Date? {
        let date = Formatter.iso8601.date(from: self)
        return date
    }
}

...
let date = crossingTime.dateFromISO8601!
...

查看正在发送并分配给 crossTime 的日期,导致日期为零的日期是“2018-08-27T16:00:09Z”。然而另一个完美的工作是“2018-08-23T13:59:54.447Z”

查看日期,其明确的一个日期具有毫秒数,而失败的日期则没有。是否可以同时支持两种日期格式?

标签: swiftdate-formatting

解决方案


推荐阅读