NSPredicate过滤器阵列,用于NSDate

时间:2012-04-18 10:49:31

标签: iphone ios nsdate nspredicate

我从我的核心数据中获取了一个NSManagedObject数组,我希望过滤数组的日期是> =今天,所以我这样做:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"(firstAired >= %@)", [NSDate date]];

但只找到我的日期>今天,今天的日期没有,为什么?

4 个答案:

答案 0 :(得分:2)

您应该像这样创建午夜日期,并将其传递给谓词

      NSDateComponents *currentComponents = [[NSCalendar currentCalendar]components:NSMinuteCalendarUnit|NSHourCalendarUnit|NSSecondCalendarUnit fromDate:[NSDate date]];
[currentComponents setMinute:0];
[currentComponents setHour:0];
[currentComponents setSecond:0];
NSCalendar *calendar = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *dateToCheck = [calendar dateFromComponents:currentComponents];

答案 1 :(得分:2)

        NSDate *now = [NSDate date];
        NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
        calendar.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 
        NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:now];
        [components setHour:00];
        NSDate *today = [calendar dateFromComponents:components];

以这种方式运作,感谢所有......

答案 2 :(得分:0)

[NSDate date]是当前时间。因此,这个谓词将只获取firstAired今天或之后的记录,而不是今天更早的记录。使用时间00:00:00构造NSDate

答案 3 :(得分:0)

因为[NSDate date]返回执行时刻的小时,分​​钟,秒....的确切日期。如果要搜索每个“今天”项目,则必须在今天午夜使用NSDate对象更改[NSDate date]。也就是说,从NSDate.date中提取日期组件,然后使用组件年,月和日构建一个新的日期对象,时间为小时:00:00 AM。