json - Realm 格式日期 JSON swift

标签 json swift2 realm

我有一个日期为“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)

错误:

Terminating app due to uncaught exception 'RLMException', reason: 'Invalid value '2015-07-04T00:00:00Z' for property 'date_use'

我的问题是:什么是适合 Realm 的日期格式?

最佳答案

这里的问题不是特定的日期格式,而是 JSON 根本不支持 native 日期类型。所以你必须将日期序列化为字符串格式。使用RFC 3339 ,就像你必须处理的那样,通常是一个不错的选择,因为它避免了歧义,所以你可以坚持下去。

Realm 的 create方法不期望反序列化的 JSON,而是对象的字典表示。这期望您已经完成将日期字符串表示形式转换回 Cocoa 的原生类型 NSDate 的预处理步骤。这不会自动完成,因为日期格式不明确(与您的不同),例如不提供有关时区的信息。

好消息是有优秀的第三方库,例如Realm-JSON ,这使得处理它变得容易得多。它为此提供了内置支持。 这也将允许映射您的 API 返回的属性命名方案,例如date_use 为符合更广泛使用的驼峰式 dateUse 的名称。

如果您不想仅为该用例引入另一个依赖项,您可以使用 and configure 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)

关于json - Realm 格式日期 JSON swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32696663/

相关文章:

json - 什么是grails.converters.deep.JSON的替代品

ios - 单击 Cell 中的 Button 获取 UITableViewCell 的 indexPath

ios - Swift 2.0 错误处理显示警告

ios - 如何在通过共享扩展选择的 NSUserDefaults 中存储多个图像

Objective-C、JSON 和对象映射

javascript - 考虑到提供的 JSON,ColumnChart 将月份移动到 x 轴

python - 修复非常大的 json 文件的格式

ios - Realm 主键迁移

ios - 处理 Realm 事务

ios - 如何在使用 Realm 的同时实现 Codable