如何在NSPredicate中匹配日期离开时间组件?

时间:2013-07-18 12:22:08

标签: ios objective-c

我有一个NSDate,时间组件归零。

我在NSArray中的每个对象中都有一个NSDate成员。

我想使用NSPredicate过滤掉一个对象数组,以便只保留与我用来过滤的日期匹配的对象。

问题是:对象中的日期字段包含我需要的时间组件。

如何形成谓词格式字符串,其中我只匹配日期部分而不是时间。

我制作了一个静态实用工具方法,该方法接受日期并给出时间组件归零的日期。

我可以在谓词字符串中使用此方法来转换该日期然后进行比较吗?

以下是代码:

NSDate *startingDate = [MyUtilities  dateByRemovingTimeFromDate:self.currentEvent.associatedEvent.startDate];
NSDate *filterDate = [MyUtilities dateByAddingDays:_selectedRow toDate:startingDate];
NSArray *filteredArray = nil;
filteredArray = [_eventsList filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"displayDate == %@",filterDate]];

我可以使用我dateByRemovingTimeFromDate MyUtilities predicate string内的displayDate方法{1}}吗?

1 个答案:

答案 0 :(得分:2)

您可以创建一个带日期范围的谓词,这样您就不需要比较时间(或修改它),只需计算一天的开始和结束范围(然后使用>=开始日期和<=结束日期。)


NSPredicate *filterPredicate = [NSPredicate predicateWithFormat:@"displayDate >= %@ AND displayDate <= %@", filterDate, nextDateAfterfilterDate];