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

kin*_*lue 6 iphone date core-data nspredicate ios

我有一个带有日期字段的实体,我想选择给定年份的记录.如何为这份工作建立一个NSPredicate?在Core Data中没有找到关于日期函数(如果有)的任何信息

谢谢

kin*_*lue 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]];  }
Run Code Online (Sandbox Code Playgroud)


Wie*_*nke 1

一种可能的方法:

\n\n

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

\n\n

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

\n\n

谓词看起来像这样:

\n\n
NSPredicate *predicate = [NSPredicate predicateWithFormat:@\xe2\x80\x9c(inceptionDate > %@) AND (inceptionDate < %@)\xe2\x80\x9d, dateBeginYear, dateEndYear];\n
Run Code Online (Sandbox Code Playgroud)\n