2009-06-19 57 views
1

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

如果你想看到我使用的代码,你可以看看我的回答这个帖子:sqlite datetime data type with iphone NSdate?

+0

听起来像夏令时问题 – teabot 2009-06-19 15:50:10

回答

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实例当地时间与本地/系统时区。

注:我还没有尝试过。

+0

我试试这个,它没有什么区别。此外,它必须是相对的,所以我不希望将其设置为GMT + 1,并且如果有人在中国玩,就会得到错误的时间戳。 – Dimitris 2009-06-19 16:20:48

+0

我并不是建议您将其设置为GMT + 1。 SQLite中的所有时间戳记似乎都固定为GMT,所以您描述的NSDateFormatter也必须同步到同一时区(GMT)。源自格式化器的NSDate应该独立于时区,因此可以转换为任何其他时区 - 无论是GMT + 1还是北京。 – teabot 2009-06-19 23:13:11

0

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

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

+0

感谢您的提示,但由于该应用程序已被制作,我不想改变它。我会记住我的下一个:) – Dimitris 2009-06-19 16:16:07

-1

那么,因为我找不到这个1小时的差异来自哪里,我用下面的方法来修复日期。这不是一个合适的解决方案,但它完全符合我的需求。所以,如果别人跑进同样烦恼的我..这是我的解决办法:

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

它只是增加一小时的延迟于日期,因此使它正确。

+0

这不是解决此问题的正确方法,并且会在用户处于不同时区时导致问题。 – Darren 2012-05-08 10:51:02

0

我想你最好实施一下teabot的建议。问题来了,当一个时区有冬季和一个不...

0

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