【问题标题】:Searching Core Data for NSDate issues在核心数据中搜索 NSDate 问题
【发布时间】:2012-08-11 03:51:51
【问题描述】:

我有一个应用程序从时间戳为 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 fetches 设置一些东西?

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 我在存储 UTC 时间并转换我的日期时遇到了麻烦。与 [NSDate date] 争吵产生的结果让我觉得我做错了整件事。您能否指出一些在 UTC 中存储日期(尤其是 [NSDate date]!)然后在本地时区检索和显示它们的方法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多