【问题标题】:Forming a predicate to filter between dates形成一个谓词在日期之间进行过滤
【发布时间】:2012-06-26 02:32:41
【问题描述】:

假设我有两个日期:

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];

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

【问题讨论】:

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


【解决方案1】:

您可以使用 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];

【讨论】:

    猜你喜欢
    • 2019-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多