5

我是否遗漏了有关 NSDate dateByAddingTimeInterval 如何处理天数的信息?这是我从特定日期(AIDate)中减去 33 天的代码。AIDate 的时间值为 00:00 PST。

activityOne.ActivityDateTime = [AIDate dateByAddingTimeInterval:-33*24*60*60];

如果 AIDate 等于 4-9-2013 00:00 PST,上述代码将减去 33 天零 1 小时,得出 2013 年 3 月 6 日 23:00 PST。

4

2 回答 2

11

24*60*60 表示 24 小时,而不是 1 天。当您的计算跨越夏令时的变化时,这两者之间存在巨大差异。

巧合的是 33 天前,您所在的时区没有夏令时。

正确的方法是使用 NSDateComponents。像这样:

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *offset = [[NSDateComponents alloc] init];
[offset setDay:-33];
NSDate *offsetedDate = [calendar dateByAddingComponents:offset toDate:[NSDate date] options:0];
于 2013-04-10T04:16:56.877 回答
6
 NSDateComponents *dc = [[NSCalendar currentCalendar] components:NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit|NSQuarterCalendarUnit fromDate:yourDate];
 [dc setDay:dc.day - 33];
 NSDate *noticeDate = [[NSCalendar currentCalendar] dateFromComponents:dc];
于 2013-04-10T04:01:44.163 回答