NSPredicate不考虑时间组件

时间:2014-06-12 13:54:50

标签: core-data nspredicate

从我的表中我想要选择特定日期的所有行而不考虑NSDate的时间组件。请问任何人建议使用NSPredicate来实现这一目标吗?

1 个答案:

答案 0 :(得分:0)

NSDate描述了一个绝对的时间点,没有" day"或"时间"组件。 核心数据"日期"属性,存储为秒数 自2001年1月1日起,格林尼治标准时间在数据库中。

你可能想要的是获取一些" Date"属性属于 由给定日期的开始和第二天的开始给出的间隔。 因此,您必须先使用NSCalendar方法计算这些日期:

NSDate *yourDate = ...;
NSDate *startOfDay, *startOfNextDay;
NSTimeInterval lengthOfDay;
NSCalendar *cal = [NSCalendar currentCalendar];
[cal rangeOfUnit:NSDayCalendarUnit startDate:&startOfDay interval:&lengthOfDay forDate:yourDate];
startOfNextDay = [startOfDay dateByAddingTimeInterval:lengthOfDay];

然后使用一个谓词来获取属性所在的所有对象 这两个值:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"date >= %@ AND date < %@",
         startOfDay, startOfNextDay];