2013-05-15 3 views
-2

Следующий кодNSDateFormatter неправильно разбирает?

NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
    [dateFormatter setDateFormat:@"MM/dd/yyyy"]; 
    NSString* source = @"11/30/2012"; 
    NSDate* date = [dateFormatter dateFromString:source]; 
    NSLog(@"%@ → %@", source, date); 

результаты в этом выходе

11/30/2012 → 2012-11-29 15:00:00 +0000

Я ожидал, что времена быть одинаковым. (т.е. справа 2012-11-30 00:00:00 +0000) ... потому что я знаю, что время ввода уже указано в UTC. Таким образом, выход должен быть таким же, если выходное время также выводится в формате UTC. Является ли это часовым поясом? В левой строковой дате не должно быть указаных временных интервалов, и NSDate должен выводить даты UTC?

+0

Да, это проблема с часовым поясом. –

+1

Возможный дубликат [NSDateFormatter dateFromString возвращает неверную дату] (http://stackoverflow.com/questions/11273001/nsdateformatter-datefromstring-returns-incorrect-date) – rmaddy

+0

У этого сообщения нет правильного и сжатого ответа, который был проверен как правильный. Проверенный ответ слишком длинный, а не тот. – Jonny

ответ

0

Я думаю, что получил.

Я добавил

[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; 

И теперь получить

11-30-2012 → 2012-11-30 00:00:00 +0000

... потому что Я знаю, что время ввода уже в UTC. Если NSDate сообщает о другом времени в UTC, то парсер (NSDateFormatter) обрабатывается неправильно.

2

Печать NSDate напрямую всегда будет печатать дату и время в стандартном формате с часовым поясом GMT (+0000), в то время как создание учитывает часовой пояс системы.

Вы, кажется, 9 часов после GMT ​​/ UTC.

+0

Это не имеет ничего общего с NSDate, это была проблема с разбором с использованием NSDateFormatter, который должен быть настроен на часовой пояс UTC. Модератор удалил мой ответ, который исправил его: '[dateFormatter setTimeZone: [NSTimeZone timeZoneWithAbbreviation: @" UTC "]];' – Jonny

+0

Ваш комментарий довольно забавный. Мой ответ объясняет, что между часовым поясом существует несоответствие при печати даты непосредственно и при использовании форматирования даты. неявное решение заключается в установке часового пояса formatters. Я не мог советовать использовать UTC, так как в то время, когда я написал этот ответ, вы сказали нам, что дата указана в utc. поэтому ваше голосование более чем неоправданно. Я не знаю, почему ваш ответ был удален, но я не несу ответственности за это. – vikingosegundo

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