我在表中有 DATE 数据类型的列。我想设置谓词,我想在其中只比较没有时间的日期。由于日期的原因,我没有得到正确的结果。
我当前的代码 -
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"((install_date > %@) AND (install_date <= %@))", fromDate,toDate]]
我在表中有 DATE 数据类型的列。我想设置谓词,我想在其中只比较没有时间的日期。由于日期的原因,我没有得到正确的结果。
我当前的代码 -
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"((install_date > %@) AND (install_date <= %@))", fromDate,toDate]]
我使用此功能从 NSDate 中抽出时间
+(NSDate *)dateWithOutTime:(NSDate *)datDate
{
if( datDate == nil ) {
datDate = [NSDate date];
}
NSDateComponents* comps = [[NSCalendar currentCalendar] components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:datDate];
return [[NSCalendar currentCalendar] dateFromComponents:comps];
}
我的建议是取出所有匹配的值,然后通过比较没有时间的日期来相应地过滤它们,因为你不能在 CoreData 中取出没有时间的日期,或者你必须先在没有时间的情况下存储它。
在这种情况下,我使用此解决方案仅比较没有时间的日期,我的日期格式是 yyyy-MM-dd:
NSDateFormatter * formatter = [NSDateFormatter new];
[formatter setDateFormat:@"yyyy-MM-dd"];
NSString * dateString = [formatter stringFromDate:[NSDate date];
NSDate *rdate = [formatter dateFromString:dateString];
NSPredicate *datePre = [NSPredicate predicateWithFormat:@"date = %@", rdate];