在核心数据中搜索 NSDate 问题
Posted
技术标签:
【中文标题】在核心数据中搜索 NSDate 问题【英文标题】:Searching Core Data for NSDate issues 【发布时间】: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 设置一些东西?
【问题讨论】:
【参考方案1】:[[NSDate alloc] init] 返回当前 UTC 日期和时间。
如果您将日期存储到数据库或服务器,作为最佳实践,您应该存储 UTC 时间,并且只有在 UI 中显示时才转换为“本地”格式。
如果您需要在 UI 中显示它,您应该使用 NSDateFormatter 以在本地时间正确显示它。您可以使用 NSTimeZone 对象来确定本地时区并将您的 NSDateFormatter 设置为适当的时区。
即使您创建了一个由“本地配置”NSDateFormatter 格式化的 NSDate,基础日期/时间仍然是 UTC。
如果您遵循这些原则,您的谓词中的日期就不会有任何问题
【讨论】:
我在存储 UTC 时间并转换我的日期时遇到了麻烦。与 [NSDate date] 争吵产生的结果让我觉得我做错了整件事。您能否指出一些在 UTC 中存储日期(尤其是 [NSDate date]!)然后在本地时区检索和显示它们的方法?以上是关于在核心数据中搜索 NSDate 问题的主要内容,如果未能解决你的问题,请参考以下文章
需要编写一个谓词来搜索核心数据对象数组属性中的日期(在我的例子中是日期数组)
搜索 CoreData 以匹配 NSDate - Swift