我的情况如下:我从 API 调用中获得票证信息,我可以在我的领域浏览器中看到,我激活票证的日期和到期时间以 UTC 格式正确保存在数据库中。
在数据库中,使用 Realm Browser,我可以看到 startTime 是 Apr 25, 2017, 1:45:30 PM,endTime 是 Apr 26, 2017, 6:45:30 AM。(在激活我的票时,我的当地时间是上午 9:45:30 - 所以这是在服务器端正确设置的)
但是,当我稍后在代码中访问该日期并从数据库中检索它时,它会给我一个带有偏移量的日期!!!(不,这不是本地时区的日期 - 它应该是保存在 UTC 中的日期)。
这是我用来从数据库中获取信息并显示它的一些代码:
func getTickets() -> [Ticket] {
let tickets = userInfo?.tickets.filter("state == %@", "activated").map({ (dbTicket) -> Ticket in
var startTime: Date? = nil
var endTime: Date? = nil
if let start = dbTicket.startTime, let end = dbTicket.endTime {
print("START ", dbTicket.startTime,
"\nNOW ", NSDate(),
"\nEND ", dbTicket.endTime)
startTime = start as Date
endTime = end as Date
}
print("START ", dbTicket.startTime,
"\nNOW ", Date(),
"\nEND ", dbTicket.endTime)
return Ticket(id: dbTicket.id, startTime: startTime, endTime: endTime)
}) ?? []
return tickets
}
这是在控制台中打印的内容:
START Optional(2017-04-25 17:45:30 +0000)
NOW 2017-04-25 13:46:15 +0000
END Optional(2017-04-26 10:45:30 +0000)
START Optional(2017-04-25 17:45:30 +0000)
NOW 2017-04-25 13:46:15 +0000
END Optional(2017-04-26 10:45:30 +0000)
这是不正确的!START 应该与 NOW 几乎相同。那么为什么从 Realm 数据库中读取的 START 和 END 日期不正确呢?尤其是我可以在 Realm Browser 中看到它们并在那里正确保存。