我正在从服务器获取以下格式的日期
"endTime": "2022-12-12T16:20:00.000Z"
我正在使用Codable将json解析为对象。
internal func getDecoder() -> JSONDecoder {
let decoder = JSONDecoder()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
decoder.dateDecodingStrategy = .formatted(dateFormatter)
return decoder
}
当设备时间格式设置为24小时格式时,它可以很好地工作。但是如果设备时间没有设置为24小时格式,它将返回null。还有其他属性需要设置吗?
1条答案
按热度按时间kcrjzv8t1#
如果您在Swift中使用具有自定义dateDecodingStrategy的自定义JSON解码器,并且在设备的时间格式未设置为24小时格式时遇到解码日期问题,则有几种可能的解决方案。
一种解决方案是使用ISO 8601 DateFormatter类来解析日期字符串并将其转换为Date对象。此类旨在处理ISO 8601标准中定义的不同日期和时间格式,因此非常适合处理日期字符串中可能出现的潜在变化。以下是一个示例:
让日期格式设置程序= ISO 8601日期格式设置程序()
//将timeZone属性设置为本地时区dateFormatter。timeZone = TimeZone.current
//使用ISO 8601 DateFormatter解析日期字符串,让日期= dateFormatter.date(来自:“2022-12- 12 T12:00:00”)
另一种解决方案是使用DateFormatter类并显式设置其dateFormat属性,以匹配您尝试解码的日期字符串的格式。这使您可以指定日期字符串的确切格式,并确保DateFormatter能够正确地分析它。下面是一个示例:
让日期格式设置程序=日期格式设置程序()
//设置dateFormat属性以匹配日期字符串dateFormatter的格式。dateFormat =“yyyy-MM-dd 'T'HH:mm:ss”
//将timeZone属性设置为本地时区dateFormatter。timeZone = TimeZone.current
//使用DateFormatter解析日期字符串,让date = dateFormatter.date(来自:“2022-12- 12 T12:00:00”)
将日期字符串解析为Date对象后,就可以在使用自定义的JSONDecoder和dateDecodingStrategy解码JSON数据时使用该对象。这样,无论设备的时间格式如何,都可以正确解码JSON数据中的日期。
请注意,在这两个示例中,将DateFormatter或ISO 8601 DateFormatter的timeZone属性设置为本地时区非常重要。这可确保针对设备的时区正确调整解析的Date对象,这对于确保正确解码日期非常重要。