我对ObjectMapper时间字符串解析相对较新,面临着一个巨大的问题。我有一个服务器以“yyyy-MM-dd'T'HH:mm:ss.SSZ”格式向我发送时间字符串,我应该在本地解析到我的Date对象。我的服务器正在向我发送当地时区的日期,即GMT + 8,所以假设我从服务器收到“2018-08-23T15:02:44.000Z”。我需要保存它在我的realm文件中的确切方式。我正在使用以下代码进行转换:
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSZ"
formatter.timeZone = TimeZone.current
recordDateTime <- (map["record_time"], DateFormatterTransform(dateFormatter: formatter))
但问题是保存在领域的日期对象是2018-08-23 11:02:44 PM。我相信DateFormatterTransform接受GMT区域中的日期字符串,因此它将其转换为我的本地时区,即GMT + 8。无论如何我可以手动设置DateFormatterTransform的时区,这样我就不会得到时移?我们无法在此时更改服务器,因为数据库非常大并且已将每个日期存储在本地时区中。
请建议如何解决这个问题。谢谢
发现这是最快的解决方案:编写一个自定义日期格式化程序,它将在其日期(from:String)方法中减去GMT偏移量。这是代码片段:
class MyDateFormatter : DateFormatter {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override init() {
super.init()
}
override func date(from string: String) -> Date? {
return super.date(from:string)?.addingTimeInterval(-8*60*60)
}
}