我正在尝试过滤一个对象数组,选择那些类型为NSDate的属性等于特定日期的对象。但是,我只想比较日期并忽略任何时差。
所以我正在使用NSPredicate:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"PropertyWithDate == %@",
[NSDate date]];
由于对象都存储了日期和时间,现在我传递的值同时存在。在比较期间,如何安排它忽略两者中的时间部分?
答案 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]];
要构建firstDate
和secondDate
,您需要使用NSCalendar
的{{1}}和components:fromDate:
方法。如果您想使用设备当前的默认日历和时区,只需使用dateFromComponents:
即可使用日历。
答案 1 :(得分:0)
您应该使用NSDatecomponents进行比较。 WWDC 2011视频中有关于日期数学和图书馆的精彩视频。
有关详细信息,请参阅NSDateComponents class reference。