2011-12-17 6 views
2

У меня есть следующая дата: month = December, day = 01, year = 2011. Дата дана как NSString со следующим форматом «111201» (YYMMdd). Теперь я хочу, чтобы разобрать эту строку в объект NSDate с NSDateFormatter:NSDateFormatter не имеет смысла

self.dateFormatter = [[NSDateFormatter alloc] init]; 
[self.dateFormatter setDateFormat:@"YYMMdd"]; 
NSDate* date = [self.dateFormatter dateFromString:strDate]; 

И выход «111201» является «2011-11-30 23:00:00 +0000». Это не имеет смысла для меня.

Как это возможно? Я ожидаю «2011-12-01 23:00:00 +0000».

+2

Похоже, что вы читаете в дате без информации о времени, поэтому он принимает определенное базовое время, а затем применяет смещение часового пояса. Укажите время вашего местного времени? –

+0

разница в часовом поясе не приводит к разнице в месяц. – samfisher

+0

@samfisher - разница между двумя датами - это всего лишь день максимум, это, скорее всего, проблема с временной шкалой. – jrturton

ответ

3

При отображении NSDate объектов в отладчике или выходе их значения через NSLog они всегда отображаются в виде даты по Гринвичу и времени (это то, что означает +0000 в конце).

Ваш местный часовой пояс «+0100» (Западная Европа?), Поэтому формат даты работает «01 декабря 2011 00:00 +0100» и правильно создает NSDate. Но в момент показа NSDate (который представляет собой только один момент времени без информации о часовом поясе) отображается в GMT - и эквивалент на час раньше, то есть «30 ноября 2011 года 23:00 +0000».

Если вы действительно хотите, чтобы преобразовать «111201» до «01 декабря 2011 12:00 утра +0000», затем установить часовой пояс, дата форматировщика по Гринвичу, как это:

self.dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0]; 
+0

Это имеет смысл. Таким образом, нет никакой реальной проблемы. Только вывод описания NSDate отображает «неправильную» дату? – toom

+0

Точно - за исключением того, что это не «неправильная» дата - «01 декабря 2011 00:00 +0100» полностью эквивалентна «30 ноября 2011 года 23:00 +0000». –

+0

Подводя итог - NSDates не зависят от часовой пояс. Вы просто должны быть осторожны в точках конверсии (строка-дата или дата-строка), чтобы учитывать часовые пояса. –

0

Попробуйте добавить это к вашей дате форматировщику исправить часовой пояс прочь GMT:

self.dateFormatter.timeZone = [NSTimeZone systemTimeZone]; 
+0

Спасибо за подсказку. Точно так же, как setTimeZone: [NSTimeZone localTimeZone], setTimeZone: [NSTimeZone systemTimeZone] не имеет никакого значения. – toom

+0

Bummer. Что делать, если вы явно установили время до 00:00:00 во время преобразования? – Bek

Смежные вопросы