2014-01-06 3 views
0

Я написал блок кодаNSDateFormatter Ошибка

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
dateFormatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US"]; 
[dateFormatter setDateFormat:@"YYYY-MM-dd"]; 

NSLog(@"date:%@,string:%@", aDate,[dateFormatter stringFromDate:aDate]); 

это хорошо работает для большинства даты, но если дата 2013-12-30 работает странно.

строка журнала является date:2013-12-30 16:00:00 +0000,string:2014-12-31

Почему? почему дата 2013-12-30 конвертировать в строку составляет 2014-12-31?

+2

Вам нужно 'yyyy', а не' YYYY'. – rmaddy

+0

Вы правы, не могли бы вы рассказать мне причину. – bohan

+0

См. [Стандарт Юникода] (http://www.unicode.org/reports/tr35/tr35-25.html#Date_Format_Patterns) для кодов форматирования даты. – rmaddy

ответ

1

NSDate, которому вы даете это, в 16:00 в GMT. Вероятно, вы не находитесь в GMT, поэтому он форматирует это время/дату для вашего текущего часового пояса, где он по крайней мере восемь часов спустя.

Создайте свой NSDate с локальным часовым поясом или используйте NSDateComponents, если вы действительно хотите просто дату без какого-либо времени.

+1

Его проблема заключается в использовании ГГГГ. Он производит странные результаты в конце года. –

+0

спасибо. вы правы, не могли бы вы рассказать мне причину? – bohan