我有一个从我的核心数据中获取的 NSManagedObject 数组,我想用 >= 今天的日期过滤数组,所以我这样做:
NSPredicate *pred = [NSPredicate predicateWithFormat:@"(firstAired >= %@)", [NSDate date]];
但是只找到今天的日期>,而今天的日期却没有,为什么?
我有一个从我的核心数据中获取的 NSManagedObject 数组,我想用 >= 今天的日期过滤数组,所以我这样做:
NSPredicate *pred = [NSPredicate predicateWithFormat:@"(firstAired >= %@)", [NSDate date]];
但是只找到今天的日期>,而今天的日期却没有,为什么?
您应该像这样创建午夜日期,并将其传递给谓词
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];
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];
以这种方式有效,感谢所有人...
[NSDate date]
是当前时间。所以这个谓词将只获取 firstAired 是今天晚些时候或之后的记录,而不是今天更早的记录。NSDate
用时间 00:00:00构造一个。
因为 [NSDate date] 返回执行时的确切日期,包括小时、分钟、秒 ....。如果要搜索每个“今天”项目,则必须在午夜将 [NSDate date] 更改为今天的 NSDate 对象。也就是说,从 NSDate.date 中提取日期组件,然后使用组件年、月和日构建一个带有小时:00:00AM 的新日期对象。