NSDate的dateByAddingTimeInterval减去天错误地更改时间(NSDate d

2019-08-21 03:54发布

我失去了一些有关的NSDate dateByAddingTimeInterval如何与天? 这是我从一个特定日期(AIDate)减去33天代码。 AIDate具有00:00 PST的时间值。

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

如果AIDate等于2013年4月9日0点PST,上面的代码将减去33天和1小时该工程以2013年3月6日23点PST。

Answer 1:

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


Answer 2:

你可以用波纹管代码做到这一点..

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

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



文章来源: NSDate dateByAddingTimeInterval subtracting days incorrectly changes time