簡體   English   中英

領域格式日期JSON swift

[英]Realm format date JSON swift

我有一個日期為“date_use”的JSON:

 {"expense":
    {"id":1,
    "amount":123.3,
    "date_use":"2015-07-04T00:00:00Z"}
 }

執行此代碼時,我在日期格式上出錯:

self.realm!.create(Expense.self, value:json["expense"].object, update: true)

錯誤:

因未捕獲的異常'RLMException'而終止應用,原因:'無效值'2015-07-04T00:00:00Z'屬性'date_use'

我的問題是:Realm的日期格式是什么?

這里的問題不是特定的日期格式,而是JSON根本不支持本機日期類型。 因此,您必須將日期序列化為字符串格式。 使用RFC 3339 ,就像你必須處理一樣,通常是一個很好的選擇,因為它避免了歧義,所以你可以堅持下去。

Realm的create方法不期望反序列化的JSON,而是對象的字典表示。 這要求您已經完成了將日期字符串表示轉換回Cocoa的本機類型NSDate的預處理步驟。 這不是自動完成的,因為存在不明確的日期格式(與您的不同),例如,不提供有關時區的信息。

好消息是有很好的第三方庫,例如Realm-JSON ,這使得它更容易處理。 它為此提供了內置支持。 這也允許將API返回的屬性命名方案(例如date_use到符合更廣泛使用的駝峰式dateUse

如果您不想僅針對該用例引入另一個依賴項,則可以使用和配置NSDateFormatter來解析符合RFC 3339標准的特定子集的日期,假設它們始終使用UTC作為時區,通過Z后綴標記。

// Setup the RFC 3339 date formatter
let rfc3339DateFormatter = NSDateFormatter()
let enUSPOSIXLocale = NSLocale(localeIdentifier: "en_US_POSIX")
rfc3339DateFormatter.locale = enUSPOSIXLocale
rfc3339DateFormatter.dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"
rfc3339DateFormatter.timeZone = NSTimeZone(forSecondsFromGMT: 0)

// Convert the RFC 3339 date time string to an NSDate
var json: AnyObject! = nil
var value = json["expense"] as! [String : AnyObject]
let date: NSDate?
if let dateString = value["date_use"] as? String {
    date = rfc3339DateFormatter.dateFromString(dateString)
} else {
    date = nil
}
value["date_use"] = date

// Create your object
self.realm!.create(Expense.self, value: value, update: true)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM