我有一个符合Encodable的类,其中包含2个日期属性。当我将其编码为字符串时,我希望这2个日期使用不同的日期格式-例如
可选(“{\n“日期1”:“2022年10月24日22:03:43 Z”,\n“日期2”:”)
但我不知道如何做,下面是示例代码
func getString() -> String? {
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
encoder.dateEncodingStrategy = .iso8601
guard let data = try? encoder.encode(TwoDates()) else { return nil }
guard let dataString = String(data: data, encoding: .utf8) else { return nil }
return dataString
}
class TwoDates: Encodable {
public var date1 = Date()
public var date2 = Date()
public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try? container.encode(date1, forKey: .date1)
try? container.encode(date1, forKey: .date2)
}
enum CodingKeys: String, CodingKey {
case date1 = "date1"
case date2 = "date2"
}
}
那么,如何为两个不同的属性使用不同的日期格式化程序呢?我应该以某种方式覆盖JSONEncoder.encode()吗?
2条答案
按热度按时间oewdyzsn1#
您已经在对日期对象进行编码;听起来你想要的是解码成不同的格式。要做到这一点,只需覆盖你的解码并使用DateFormatter()对象。你可以在这里找到文档和示例https://developer.apple.com/documentation/foundation/dateformatter如果你想存档为另一个对象,你可以在编码覆盖中使用格式化程序。记住,这样的话负载会更大。
pqwbnv8z2#
它实际上是如此简单,我不能相信它,只是需要提供编码的日期格式,即