iPhone上的SQLite时间戳错误的时间

时间:2009-06-19 15:33:40

标签: iphone database datetime sqlite

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

如果您想查看我正在使用的代码,您可以查看我对此帖子的回答:sqlite datetime data type with iphone NSdate?

5 个答案:

答案 0 :(得分:2)

听起来好像SQLite和NSDateFormatter正在使用的时区之间可能存在日光节省时区不一致。它looks as though SQLite stores the datetime in GMT。因此,您需要确保NSDateFormatter也设置为GMT。看起来好像你可以这样做:

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

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

答案 4 :(得分:-1)

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

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

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