我从我的核心数据中获取了一个NSManagedObject数组,我希望过滤数组的日期是> =今天,所以我这样做:
NSPredicate *pred = [NSPredicate predicateWithFormat:@"(firstAired >= %@)", [NSDate date]];
但只找到我的日期>今天,今天的日期没有,为什么?
答案 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。