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

我缺less一些关于NSDate dateByAddingTimeInterval如何与天工作吗? 这是我的代码从特定的date(AIDate)减去33天。 AIDate的时间值为00:00 PST。

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

如果AIDate等于4-9-2013 00:00 PST,则上面的代码将减去33天和1小时,这个时间是3-6-2013 23:00 PST。

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

你可以用波纹pipe代码

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

我希望这对你有帮助…