2012-04-10 3 views
8

Я установил локаль и часовой пояс, но когда я форматирую дату, я всегда получаю недопустимую дату. Месяц всегда декабрь, а год меньше, чем в указанный год. В моем случае мне не нужен компонент дня.Форматирование месяца и года с использованием NSDateFormatter возвращает недопустимую дату

Я проверил другое подобное сообщение, но это не решило проблему.

Любая помощь приветствуется. Спасибо.

Вот код:

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
dateFormatter.locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]; 
dateFormatter.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 
[dateFormatter setDateFormat:@"MMM YYYY"]; 
NSDate *formattedDate = [dateFormatter dateFromString:@"Sep 2013"]; 
NSLog(@"Date: %@", [dateFormatter stringFromDate:formattedDate]); 
[dateFormatter release]; dateFormatter = nil; 

ВЫВОД: Дата: декабрь 2012 Формат

ответ

15

"YYYY" используется для "Неделя года" на основе календарей. Вместо этого используйте спецификатор формата «yyyy»:

[dateFormatter setDateFormat:@"MMM yyyy"]; 
+0

Это сообщение объясняет more.http : //stackoverflow.com/a/8187078/641062 – Vignesh

+0

@ Vignesh, спасибо за ссылку. Вероятно, некоторые спецификаторы формата не имеют смысла для календаря «Неделя года», что приводит к разным результатам. – Vladimir

+0

Спасибо за информацию. :) – Vignesh

0

Я просто хотел добавить что-то к замечательному ответу Владимира. Если вы сделаете это, прежде чем устанавливать свой язык, кажется, что форматирование даты сходит с ума. То, что я должен был сделать, чтобы установить локаль перед установкой нового формата, а затем использовать setDateFormat изменить формат, основанный на местности used.So что-то, как это будет делать:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setLocale:[NSLocale currentLocale]];//I wanted to set the locale to wherever user is using my app in 
[formatter setDateFormat:@"MMM YYYY"]; 
NSDate *now = [NSDate Date]; 
NSString *fancyLookingDate = [formatter stringFromDate:now]; 
+0

Я думаю, что '[formatter setDateStyle: NSDateFormatterShortStyle];' и '[formatter setTimeStyle: NSDateFormatterNoStyle];' избыточны в вашем коде. Если вы используете 'setDateFormat', предыдущий вызов для установки стиля даты и стиля времени будет проигнорирован. –

+0

@YuchenZhong не знал, что, дата и время разговора отформатированы отдельно. Спасибо за ответ. – Septronic

+0

@YuchenZhong Только что отредактировал мой ответ, чтобы отразить ваш комментарий. – Septronic

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