Ответ 1
Хорошо, я сообщил об этом как об ошибке для apple, и я получил довольно полезный ответ, поэтому я подумал, что поделюсь им здесь.
Инженерия определила, что это проблема для вас решить на основе следующего:
Вы никогда не должны устанавливать формат "MMMM yyyy" непосредственно в NSDateFormatter, если хотите работать на разных языках; некоторые могут иметь первый год и т.д.
Если вам нужен формат, который использует полное имя месяца MMMM + год, вы должны передать это как "шаблон" в NSDateFormatter dateFormatFromTemplate: например: NSString * format = [NSDateFormatter dateFormatFromTemplate: @ "yMMMM" options: 0 locale: locale];
Для финского языка это приводит к формату даты "LLLL y", который будет создавать правильную именную форму имен месяцев: tammikuu, helmikuu, maaliskuu и т.д.
Многие языки, включая финский и многие славянские языки, используют именную форму названия месяца без номера дня, а также родительскую форму или какую-либо связанную с ней форму (для финского языка) для названия месяца с номером дня. NSDateFormatter имеет оба варианта: MMMM ссылается на родительскую форму и LLLL, ссылаясь на номинативную форму. [NSDateFormatter dateFormatFromTemplate...] может определить, какой из них использовать на основе того, какие поля находятся в шаблоне. Таким образом, вы предоставляете шаблон, определяющий MMMM или LLLL, и он будет отображен в правильной форме в результирующем формате.
Обратите внимание, что в таких шаблонах пространство и пунктуация игнорируются; они будут определены как часть данных о правильных форматах дат для указанной локали.
Для получения дополнительной информации о характере шаблона, таком как MMM и LLL, см. http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table
Информацию о dateFormatFromTemplate см. https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html#//apple_ref/occ/clm/NSDateFormatter/dateFormatFromTemplate:options:locale:
Проблема здесь - это то, что разработчик должен решить при использовании NSDateFormatter; NSDateFormatter ведет себя как предполагалось.
Только что заметил, я оставил важную часть: после получения строки формата, передав шаблон [NSDateFormatter dateFormatFromTemplate...] то эта строка формата является той, которая должна быть установлена в [NSDateFormatter setDateFormat:...] (возможно, это очевидно, но это стоит сказать)