Objective-C - 如何找到prop等于date的对象?

时间:2012-03-07 15:19:07

标签: objective-c nsdate filtering nspredicate

我正在尝试过滤一个对象数组,选择那些类型为NSDate的属性等于特定日期的对象。但是,我只想比较日期并忽略任何时差。

所以我正在使用NSPredicate:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"PropertyWithDate == %@", 
                      [NSDate date]];

由于对象都存储了日期和时间,现在我传递的值同时存在。在比较期间,如何安排它忽略两者中的时间部分?

2 个答案:

答案 0 :(得分:3)

请记住,NSDate表示一个时间点,与时区无关,因此只讨论NSDate关于特定日历和时区的日期部分是有意义的。

简短的回答是你需要构建两个NSDate:一个是你日期的12点,一个是12点的第二天,然后设置你的谓词来查找两者之间的日期:

NSPredicate *firstPredicate = [NSPredicate predicateWithFormat:@"PropertyWithDate > %@", firstDate];
NSPredicate *secondPredicate = [NSPredicate predicateWithFormat:@"PropertyWithDate < %@", secondDate];

NSPredicate *predicate = [NSCompoundPredicate andPredicateWithSubPredicates:[NSArray arrayWithObjects:firstPredicate, secondPredicate, nil]];

要构建firstDatesecondDate,您需要使用NSCalendar的{​​{1}}和components:fromDate:方法。如果您想使用设备当前的默认日历和时区,只需使用dateFromComponents:即可使用日历。

答案 1 :(得分:0)

您应该使用NSDatecomponents进行比较。 WWDC 2011视频中有关于日期数学和图书馆的精彩视频。

有关详细信息,请参阅NSDateComponents class reference