0

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

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

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

4

4 回答 4

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];
于 2012-04-18T11:11:27.960 回答
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];

以这种方式有效,感谢所有人...

于 2012-04-18T11:40:41.100 回答
0

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

于 2012-04-18T10:53:11.270 回答
0

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

于 2012-04-18T10:57:02.283 回答