2016-04-23 106 views

回答

10

這聽起來像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

+0

謝謝,這看起來不錯。是的,我必須調整我的日期格式。它現在不適用,例如'2016-04-24T16:47:58.319 + 0000'。不知道爲什麼這不會與你在答案中提到的'NSDateFormatter'格式一致。 –

+0

由於我使用的dateFormat不接受時區信息。看看我鏈接的其他問題;我認爲答案包括一個例子。 – jtbandes

3

斯威夫特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 
    }() 
}