NSDate dateByAddingTimeInterval subtracting days incorrectly changes time

Am I missing something about how NSDate dateByAddingTimeInterval works with days? Here is my code for subtracting 33 days from a specific date (AIDate). AIDATE has a time value of 00:00 PST.

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

If AIDate is 4-9-2013 00:00 PST, the above code subtracts 33 days and 1 hour, which will work until 3-6-2013 23:00 PST.

+5
source share
2 answers

24 * 60 * 60 means 24 hours, not 1 day. There is a huge difference between the two when your calculation crosses a change from or to daylight saving time.

Coincidentally 33 days ago, there was no daylight saving time in your time zone.

The right way to do this is to use NSDateComponents. Like this:

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *offset = [[NSDateComponents alloc] init];
[offset setDay:-33];
NSDate *offsetedDate = [calendar dateByAddingComponents:offset toDate:[NSDate date] options:0];
+11

.

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

, ...

+6

All Articles