开发者

NSPredicate to filter only on "year" part of a date field

开发者 https://www.devze.com 2023-02-18 17:11 出处:网络
I have an entity with a date field and I would like to select the records for a given year. How to开发者_JS百科 build a NSPredicate for the job? Didn\'t find anything about date functions (if any) in

I have an entity with a date field and I would like to select the records for a given year. How to开发者_JS百科 build a NSPredicate for the job? Didn't find anything about date functions (if any) in Core Data

thanks


Eventually I did more or less as suggested by Wienke. To create the predicate that fetches the records for a certain year(s), I did like this:

- (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]];  }


A possible method:

Step 1) See "Creating a Date from Components" from Apple's "Date and Time Programming Guide." Make an NSDate representing the beginning of the year, and an NSDate representing the end of the year.

Step 2) Then you could build a predicate that searches for objects with date attrs that are greater than the first date and less than the last date.

The predicate would look something like this:

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

精彩评论

暂无评论...
验证码 换一张
取 消