我有一个这样的对象
notificToSubmit.NotificDateCreated = Date()
notificToSubmit.NotificOccDateTime = dtPicker.date
现在,我想使用ALAMO fire将对象发送到我的api。我需要将其转换为JSONObject。看起来像这样:
let data = try! JSONEncoder().encode(notifToSubmit)
let jsonD = try? JSONSerialization.jsonObject(with: data, options: .allowFragments)
一切都很好,但是它给我错误的日期值。 它给了我timeIntervalSinceReferenceDate而不是实际的日期值:
(2 elements)
- key: NotificDateCreated #1
- super: NSMutableString
- super: NSString
- super: NSObject
- value: 552834752.59258 #2
- super: NSNumber
- super: NSValue
- super: NSObject
代替
NotificDateCreated: 2018-07-09 13:12:32 +0000
NotificOccuredDateTime: 2018-07-09 13:12:28 +0000
是的,我知道, 552834752.59258 是一个有效的有效日期,但API无法识别。
Any Ideas如何在JSONSerialization之后获取 2018-07-09 13:12:32 的实际日期
答案 0 :(得分:1)
如果您需要日期的字符串表示形式,则可以将自定义日期编码策略传递给编码器,例如
struct Foo : Codable {
let date : Date
}
let foo = Foo(date: Date())
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let encoder = JSONEncoder()
encoder.dateEncodingStrategy = .formatted(formatter)
do {
let data = try encoder.encode(foo)
print(String(data: data, encoding:.utf8)!) // {"date":"2018-07-10 10:44:16"}
} catch {
print(error)
}
答案 1 :(得分:0)
将其留给Google Code Warriors- Alamofire 5 :
let encoder = JSONEncoder()
encoder.dateEncodingStrategy = JSONEncoder.DateEncodingStrategy.iso8601
AF.request(api, method: httpMethod, parameters: encodableRequestData, encoder: JSONParameterEncoder.init(encoder: encoder))
这会将encodableRequestData中的任何Date字段编码为iso8601字符串。您也可以选择其他DateEncodingStrategies或自己制作
答案 2 :(得分:-1)
我需要尽快完成此操作,所以我的快速解决方案是将日期属性更改为字符串,并创建将Date转换为string,然后再次从String转换为Date的函数。我知道这不是最好的,但是人们正在呼吸我的脖子,我需要做到这一点。
如果有人有更好的解决方案,请务必!