2

我有一个应用程序从时间戳为 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 小时,因为该应用程序可能会在不同的时区使用。我唯一的想法是让设备时区弄清楚它落后于 UTC 多少小时,然后使用 NSDateComponents 添加/减去这些小时。通过在 CoreData 中为 NSPredicate 获取设置一些内容有没有更简单的方法?

4

1 回答 1

1

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

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

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

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

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

于 2012-08-11T04:03:55.643 回答