[英]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.