搜索核心数据以查找NSDate问题

时间:2012-08-11 03:51:51

标签: objective-c ios core-data nsdate nspredicate

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

如果我这样做

// 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个小时,因为该应用可能会在不同的时区使用。我唯一的想法是让设备时区计算出使用NSDateComponents加上/减去这些小时后UTC的时间。有没有更简单的方法只需在CoreData中为NSPredicate提取设置一些东西?

1 个答案:

答案 0 :(得分:1)

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

如果要将日期存储到数据库或服务器,作为最佳实践,您应该存储UTC时间,并且只有在UI中显示时才会转换为“本地”格式。

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

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

如果您遵循这些原则,则谓词中的日期不会出现任何问题