2012-08-11 120 views
2

我有一个应用程序,从时间戳为UTC的服务器拉数据。我的应用必须根据当前的当地时间在屏幕上显示内容。我遇到的问题是以下搜索核心数据的NSDate问题

如果我这样做

// the Y M D is fine but time is -8 behind so showing 03:34 instead of 11:34. 
NSDate *today = [[NSDate alloc] init]; 

所以,当我做到这一点

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(start <= %@) AND (room == %@) AND (end >= %@)", today, room, today]; 

当插入NSPredicate我没有得到正确的结果在今天是“2012-08-10 03:34:00”,但应该是“2012-08-10 11:34:00”

我不能只添加8小时的时间,因为该应用程序可能用于不同的时区。唯一的想法是我得到的是设备时区计算它在UTC后面多少小时使用NSDateComponents加/减这些小时。有没有更简单的方法,只需在CoreData中设置NSPredicate提取的内容?

回答

1

[[NSDate alloc] init]返回当前的UTC日期和时间。

如果您要将日期存储到数据库或服务器,则作为最佳做法,应存储UTC时间,并且只有在用户界面中显示时才总是将其转换为“本地”格式。

如果你需要在你的UI中显示它,你应该使用NSDateFormatter在本地时间正确显示它。您可以使用NSTimeZone对象来确定本地时区,并将NSDateFormatter设置为适当的时区。

即使当您创建由“本地配置的”NSDateFormatter格式化的NSDate时,基础日期/时间仍然是UTC。

如果你遵循这些原则,你将不会有日期的任何问题,在您的谓语

我有一个时间存储在UTC时间和转换我的日期赫克
+1

..我想我有事情想通了,但在过去的三天里,我的头靠在墙上,因为试图与[NSDate date]一起争吵已经产生了结果,这让我觉得我正在对整个事情做错了。你能否指点我一些以UTC存储日期的方法(特别是[NSDate date]!),然后检索并在当地时区显示它们? – SAHM 2013-03-17 21:41:54