gpt4 book ai didi

json - Realm 格式日期 JSON swift

转载 作者:行者123 更新时间:2023-12-05 01:31:39 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com