2013-09-30 2 views
-1

Я пытаюсь использовать dateByAddingTimeInterval:, чтобы добавить 8 дней к моей текущей дате, но это дает мне странный результат.dateByAddingTimeInterval: дает неверный результат

Это код, я использую:

-(void)requestForGetEPGChannelsProgramsSucceed:(id)jsonResponse andEpgId:(NSString *)epgId forDate:(NSDate *)forDate dayOffset:(NSInteger)dayOffset 

    NSDate *dateWithOffset = [forDate dateByAddingTimeInterval:(dayOffset * 86400.0)]; 

forDate представляет дату сегодня с часа 0 и минут 0. Для этого примера forDate именно 30/09/2013 00:00

dayOffset is 8.

Я ожидаю получить 8/10/2013 00:00, но значение, которое я получаю (не распечатываю), - 10/10/2013 23:00.

Почему? У кого-то есть ключ?

EDIT: Я только заметил, что первые даты, которые выходят хорошо, являются IDT, и через несколько дней он использует IST. Разница заключается в «израильском дневном свете» и «стандартном времени в Израиле», что составляет 1 час разницы.

Как мне преодолеть это препятствие?

+0

Это не меняет на этой неделе ... Вот почему это странно. Он изменяется на 27 октября – user2328703

+0

Кроме того, я пробовал решение по вашей ссылке .. Не работает – user2328703

+0

Не конвертируйте дни в секунды, вы должны использовать соответствующие методы, описанные в документации по календарным вычислениям. – Abizern

ответ

1

Поскольку NSDates не имеют ни малейшего понятия о часовых поясах, а и с использованием фиксированного интервала времени, чтобы добавить 1 день может дать вам неправильные результаты, есть 2 две вещи, которые необходимо улучшить:

NSDate *dateToBeOffset = [NSDate date]; 
NSDateComponents *dayComponent = [[NSDateComponents alloc] init]; 
[dayComponent setDay:8]; //Days you'd like to offset 
NSCalendar *theCalendar = [NSCalendar currentCalendar]; 
NSDate *offsetDate = [theCalendar dateByAddingComponents:dayComponent toDate:dateToBeOffset options:0]; 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"EET"]; // Eastern_European_Time 
[dateFormatter setDateStyle:NSDateFormatterLongStyle]; 
[dateFormatter setTimeStyle:NSDateFormatterShortStyle]; 
[dateFormatter setTimeZone:timeZone]; 

NSLog(@"%@", [dateFormatter stringFromDate:offsetDate]);