使用SwiftyJSON將JSON date反序列化爲NSDate
實例的最佳方式是什麼?使用SwiftyJSON反序列化NSDate
是僅僅使用stringValue
與NSDateFormatter
還是有SwiftyJSON的內置日期API方法?
使用SwiftyJSON將JSON date反序列化爲NSDate
實例的最佳方式是什麼?使用SwiftyJSON反序列化NSDate
是僅僅使用stringValue
與NSDateFormatter
還是有SwiftyJSON的內置日期API方法?
這聽起來像NSDate支持不內置到SwiftyJSON,但您可以擴展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。
斯威夫特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
}()
}
謝謝,這看起來不錯。是的,我必須調整我的日期格式。它現在不適用,例如'2016-04-24T16:47:58.319 + 0000'。不知道爲什麼這不會與你在答案中提到的'NSDateFormatter'格式一致。 –
由於我使用的dateFormat不接受時區信息。看看我鏈接的其他問題;我認爲答案包括一個例子。 – jtbandes