使用SwiftyJSON反序列化NSDate

时间:2016-04-23 01:40:41

标签: json swift nsdate swifty-json

使用SwiftyJSON将JSON date反序列化为NSDate实例的最佳方法是什么?

是否只将stringValueNSDateFormatter一起使用,或者是否有使用SwiftyJSON的内置日期API方法?

2 个答案:

答案 0 :(得分:10)

听起来,SwiftyJSON没有内置NSDate支持,但您可以使用自己的便利访问器扩展JSON类。

以下代码改编自this GitHub issue

extension JSON {
    public var date: NSDate? {
        get {
            if let str = self.string {
                return JSON.jsonDateFormatter.dateFromString(str)
            }
            return nil
        }
    }

    private static let jsonDateFormatter: NSDateFormatter = {
        let fmt = NSDateFormatter()
        fmt.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
        fmt.timeZone = NSTimeZone(forSecondsFromGMT: 0)
        return fmt
    }()
}

示例:

let j = JSON(data: "{\"abc\":\"2016-04-23T02:02:16.797Z\"}".dataUsingEncoding(NSUTF8StringEncoding)!)

print(j["abc"].date)  // prints Optional(2016-04-23 02:02:16 +0000)

您可能需要为自己的数据调整日期格式化程序;有关更多示例,请参阅this question。另请参阅this question about date formatting in JSON

答案 1 :(得分:3)

Swift 3 版本

extension JSON {
    public var date: Date? {
        get {
            if let str = self.string {
                return JSON.jsonDateFormatter.date(from: str)
            }
            return nil
        }
    }

    private static let jsonDateFormatter: DateFormatter = {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
        dateFormatter.timeZone = TimeZone.autoupdatingCurrent
        return dateFormatter
    }()
}