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

Aar*_*ron 5 iphone cocoa-touch objective-c nsdate ios

我错过了一些关于NSDate dateByAddingTimeInterval如何使用几天的内容?这是我从特定日期(AIDate)减去33天的代码.AIDate的时间值为00:00 PST.

activityOne.ActivityDateTime = [AIDate dateByAddingTimeInterval:-33*24*60*60];
Run Code Online (Sandbox Code Playgroud)

如果AIDate等于太平洋标准时间4-9-2013 00:00,则上述代码将减去33天和1小时,其工作时间为太平洋标准时间3-6-2013 23:00.

Mat*_*uch 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];
Run Code Online (Sandbox Code Playgroud)


Par*_*shi 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];
Run Code Online (Sandbox Code Playgroud)

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