0

假设我有两个日期:

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

我有一个名为 MBDate 的核心数据对象,它有一个 NSDate 属性。我想获得所有 MBDate 的天数,包括上述天数之间的天数。因此,它应该忽略小时、秒和分钟,而只是获取介于 8/29 到 12/01 之间的所有天数。

就像是:

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

但我不确定我会如何告诉它忽略小时和分钟,只看日子。有任何想法吗?

4

1 回答 1

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];
于 2012-06-24T16:57:11.723 回答