Подтвердить что ты не робот

NSDateFormatter не показывает полное имя месяца, только однозначный номер

Не знаю, в чем проблема, но вместо того, чтобы получить месяц "Июль", я получаю "07".

dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setLocale:[NSLocale systemLocale]];
[dateFormat setTimeZone:[NSTimeZone localTimeZone]];    
[dateFormat setDateFormat:@"MMMM dd, h:mm a"];

Я пробовал M, MM, MMM, MMMM, и все они дают мне число, а не имя месяца, хотя и с разными количествами ведущих 0.

4b9b3361

Ответ 1

Оказывается, проблема со второй строкой, setLocale. Я предполагаю, что система не будет использовать по умолчанию английские месячные имена, если параметр locale был установлен вручную? Я живу на английском языке locale, но, возможно, это не имеет значения.

В любом случае, не устанавливая локаль, исправляется проблема с именем месяца.

dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setTimeZone:[NSTimeZone localTimeZone]];    
[dateFormat setDateFormat:@"MMMM dd, h:mm a"];

Ответ 3

-systemLocale не то, что вы хотите здесь. Он возвращает резервную локаль, если другой язык не подходит. Используйте -currentLocale, чтобы получить текущую локаль пользователя.

также:
Для получения правильного формата даты вы должны использовать метод NSDateFormatter +dateFormatFromTemplate:options:locale:. На некоторых языках день наступает до месяца и т.д. И наоборот.