关于数据库:iPhone上的SQLite时间戳错误的时间

Wrong time on SQLite timestamp on the iPhone

从我的iPhone应用程序,我在我的sqlite数据库中插入一些数据,包括使用CURRENT_TIMESTAMP默认值的日期。 一切都很好,除了时间比它应该的时间晚1小时。 这在设备和模拟器上都会发生。
任何sqlite设置(如当前时间)我可以访问某个地方?

如果你想查看我正在使用的代码,你可以看看我对这篇文章的回答:sqlite datetime数据类型与iphone NSdate?


听起来似乎SQLite和NSDateFormatter正在使用的时区之间可能存在日光节省时区不一致。看起来SQLite将日期时间存储在GMT中。因此,您需要确保NSDateFormatter也设置为GMT。看起来好像你可以这样做:

1
2
gmtFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[gmtFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]

一旦你有了NSDate实例,我希望你可以使用一个使用本地/系统时区设置的NSDateFormatter实例来获取它的字符串版本,显示正确的本地时间。

注意:我实际上没有试过这个。


我也不得不解决这个问题,茶壶的答案是正确的。
由sqlite创建的时间戳是GMT,所以当你从数据库中读取时,你需要告诉你的日期格式化程序在GMT中读取它。生成的NSDate将是您所在时区的正确日期。
你说你纠正它的方式,加1小时,最终会失败。在GMT时区使用该应用的任何人都会看到+1小时。其他时区的任何人都会看到完全不同的时间偏移。
(我知道这已经有好几年了,但它刚刚帮助了我)。


我想你最好实施teabot的建议。问题来自于一个时区有冬季而且有一个时区没有......


您可能需要考虑使用现在可在O / S 3.0中使用的核心数据 - 这样就可以自动处理这样的事情,而无需指定时区等 - 它只会使用用户的默认值并保持一致。

还有许多其他优点 - 但这似乎是一个相关的优点。


好吧,因为我找不到这个1小时差异的来源,我使用以下方法来修复日期。这不是一个合适的解决方案,但它完全符合我的需要。所以如果有其他人遇到与我相同的麻烦..这是我的修复:

1
NSDate *date = [[NSDate alloc] initWithTimeInterval:3600 sinceDate:[formatter dateFromString:score.datetime]];

这只是在日期时间增加了一个小时的延迟,因此使其正确。