NSPredicate仅过滤日期字段的“年”部分

时间:2011-03-19 22:09:32

标签: iphone ios core-data date nspredicate

我有一个带有日期字段的实体,我想选择给定年份的记录。如何为这份工作建立一个NSPredicate?在Core Data

中没有找到关于日期函数(如果有)的任何信息

谢谢

2 个答案:

答案 0 :(得分:5)

最终我按照Wienke的建议做了或多或少。要创建获取特定年份记录的谓词,我确实喜欢这样:

- (NSPredicate*) predicateFromYear:(NSInteger)start span:(NSInteger)aSpan {
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *dc = [NSDateComponents new];

[dc setYear:start];

NSDate *startDate,*endDate;

startDate = [cal dateFromComponents:dc];
[dc setYear:aSpan];
endDate = [cal
           dateByAddingComponents:dc
           toDate:startDate
           options:0];

[dc release];
return [NSPredicate predicateWithFormat:
        @"date >= CAST(%f, \"NSDate\") AND date < CAST(%f, \"NSDate\")",
        [startDate timeIntervalSinceReferenceDate],
        [endDate timeIntervalSinceReferenceDate]];  }

答案 1 :(得分:1)

一种可能的方法:

步骤1)请参阅Apple的“日期和时间编程指南”中的“从组件创建日期”。制作代表年初的NSDate,以及代表年末的NSDate。

步骤2)然后,您可以构建一个谓词,搜索日期为第一个日期且小于上一个日期的对象。

谓词看起来像这样:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@“(inceptionDate > %@) AND (inceptionDate < %@)”, dateBeginYear, dateEndYear];