昨天的NSDate间隔

时间:2013-07-12 15:19:28

标签: objective-c date nsdate nspredicate nscalendar

我需要根据昨天添加的值过滤搜索结果。我昨天看到很多使用:

NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *components = [cal components:( NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit ) fromDate:[[NSDate alloc] init]];
        [components setHour:-24];
        [components setMinute:0];
        [components setSecond:0];
        NSDate *yesterday = [cal dateByAddingComponents:components toDate:[NSDate date] options:0];
predicate = [NSPredicate predicateWithFormat:@"created_at >= %@", yesterday];

但是从这个确切的时刻开始,这发现了24小时。我需要在昨天上午12:01到晚上12点过滤。那就是昨天的实际24小时。

我猜我需要做一些事情: 1.取当前日期 2.查找从当前日期到当天上午1​​2:01的时间 3.然后从该日期开始减去24小时

我有信心我可以做#3(当然还有#1),但我不知道如何去做#2。我可能过度思考但我似乎无法理解如何说:“好吧,现在是早上8点03分,我需要删除8小时2分钟,这将使我在上午12:01”。

1 个答案:

答案 0 :(得分:2)

从今天的某个日期开始,例如“now”:

NSCalendar *cal = [NSCalendar currentCalendar];
NSDate *now = [NSDate date];

减去一天以获得昨天的日期:

NSDateComponents *minusOneDay = [[NSDateComponents alloc] init];
[oneDay setDay:-1];
NSDate *nowMinusOneDay = [cal dateByAddingComponents:minusOneDay toDate:now options:0];

计算包含昨天日期的“日历单位”的开始和结束日期:

NSDate *startOfYesterday;
NSTimeInterval lengthOfYesterday;
[cal rangeOfUnit:NSDayCalendarUnit startDate:&startOfYesterday interval:&lengthOfYesterday forDate:nowMinusOneDay];
NSDate *endOfYesterday = [startOfYesterday dateByAddingTimeInterval:lengthOfYesterday];

即使在今天和昨天之间发生夏令时转换,这也应该有效。

一般情况下,应避免使用明确的时间间隔,例如“24小时”,因为不是每天都有这样的长度。