2016-04-23 12 views

Antwort

10

Es klingt wie NSDate-Unterstützung ist nicht in SwiftyJSON integriert, aber Sie können die JSON-Klasse mit Ihren eigenen Komfort-Accessoren erweitern. Der folgende Code wurde von this GitHub issue angepasst.

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

Beispiel:

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) 

Unter Umständen müssen Sie das Datum Formatierer für Ihre eigenen Daten optimieren; Weitere Beispiele finden Sie unter this question. Siehe auch this question about date formatting in JSON.

+0

Danke, das sieht toll. Ja, ich muss meine Datumsformatierung optimieren. Es funktioniert jetzt nicht mit einem Beispieldatum von '2016-04-24T16: 47: 58.319 + 0000'. Nicht sicher, warum dies nicht mit dem 'NSDateFormatter' Format geschieht, das Sie in der Antwort erwähnen. –

+0

Da das von mir verwendete dateFormat keine Zeitzoneninformationen akzeptiert. Sieh dir die anderen Fragen an, die ich verlinkt habe; Ich denke, die Antworten enthalten ein Beispiel, das tut. – jtbandes

3

Swift 3 Version

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