NSDate dateByAddingTimeInterval减去天数错误地更改时间

时间:2013-04-10 03:57:55

标签: iphone ios objective-c cocoa-touch nsdate

我是否遗漏了一些关于NSDate dateByAddingTimeInterval如何与天工作的内容?这是我从特定日期(AIDate)减去33天的代码。 AIDate的时间值为00:00 PST。

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

如果AIDate等于太平洋标准时间4-9-2013 00:00,则上述代码将减去33天和1小时,这将在太平洋标准时间3-6-2013 23:00结束。

2 个答案:

答案 0 :(得分: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];

答案 1 :(得分: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];

我希望这对你有帮助......