形成谓词以在日期之间进行过滤

时间:2012-06-24 16:28:21

标签: iphone objective-c ios core-data nsdate

说我有两个日期:

minDate:2012-08-29 12:22:17 +0000
maxDate:2011-12-01 18:14:38 +0000

我有一个名为MBDate的Core Data对象,它有一个NSDate属性。我希望得到所有MBDate的日期,包括在上述日子之间。所以它应该忽略小时,秒和分钟,并且只需要介于两者之间的所有日子,包括8月29日至12月1日。

类似的东西:

predicate = [NSPredicate predicateWithFormat:@"date < %@ AND date > %@", maxDate, minDate];

但是我不知道如何告诉它忽略时间和分钟,只看一下日子。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

您可以使用NSDateComponents设置“低”和“高”日期,并在谓词中使用这些日期。

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
gregorian.timeZone = [NSTimeZone timeZoneWithAbbreviation"@"UTC"];

NSDateComponents *dateComponents = [gregorian components:(NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:minDate];

[dateComponents setHour:0];
[dateComponents setMinute:0];
[dateComponents setSecond:0];
NSDate *lowDate = [gregorian dateFromComponents:dateComponents];

dateComponents = [gregorian components:(NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:maxDate];

[dateComponents setHour:23];
[dateComponents setMinute:59];
[dateComponents setSecond:59];
NSDate *highDate = [gregorian dateFromComponents:dateComponents];