日期的核心数据 NSPredicate

Posted

技术标签:

【中文标题】日期的核心数据 NSPredicate【英文标题】:Core Data NSPredicate for date 【发布时间】:2012-09-19 17:39:31 【问题描述】:

在我的模型中,我有日期属性,我将其设置为 [NSDate date],但使用诸如

之类的谓词
 NSPredicate *predicate = [NSPredicate predicateWithFormat:
                              @"date==%@ ,date]; 

返回noting。我知道问题是当我设置[NSDate date] 它还存储时间并且 NSPredicate 总是返回空数据。有没有办法将"date==%@" 部分转换为只查找日期?

【问题讨论】:

用这样的日期做谓词的问题在于,这将是一个亚毫秒级的比较;您必须完全在同一时刻,而不仅仅是同一日历日。 这个“你必须有完全相同的时间”让我想到了处理日期时间的这个想法:在存储日期之前将日期时间全部设为 0。当从模型中检索时,传递一个时间为 0s 的日期值。 【参考方案1】:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(date >= %@) AND (date <= %@)", startDate, endDate];

【讨论】:

感谢您的回复,但我有一个约会(今天)。 endDate 应该是明天? 它是你的选择.. 不要给出结束日期,删除 tat 部分。仅通过 startDate。 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(date >= %@)", startDate]; 仅设置 startDate 导致如果我在日期前 2 天给出它会返回我在前 2 天和今天之间的所有记录。我修复了它,将所选日期添加了 1 天,并将您的第一个回复与 endDate 一起使用。 括号真的有必要吗?

以上是关于日期的核心数据 NSPredicate的主要内容,如果未能解决你的问题,请参考以下文章

将日期保存到核心数据

使用核心数据管理节标题中的日期

核心数据保存日期错误

获取核心数据中 NSManagedObject 的修改日期?

日期的核心数据 NSPredicate

iOS 核心数据总和数据按日期、月份年份