Если вы работаете с видимыми пользователем датами, вам следует избегать установки строки формата даты, потому что очень сложно предсказать, как ваша строка формата будет выражаться во всех возможных пользовательских конфигурациях. Скорее, вы должны попытаться ограничить себя настройкой даты и времени (через - [NSDateFormatter setDateStyle:] и - [NSDateFormatter setTimeStyle:]).
С другой стороны, если вы работаете с датами фиксированного формата, вы должны сначала установить для локали форматера даты нечто подходящее для вашего фиксированного формата. В большинстве случаев лучшим языком для выбора является en_US_POSIX, язык, специально разработанный для получения результатов на английском языке США, независимо от пользовательских и системных предпочтений. «en_US_POSIX» также инвариантен во времени (если США в какой-то момент в будущем изменят способ форматирования дат, «en_US» изменится, чтобы отразить новое поведение, но «en_US_POSIX» не будет), и между компьютерами ( «en_US_POSIX» работает на iPhone OS так же, как на Mac OS X и на других платформах).
После того, как вы установили en_US_POSIX в качестве локали форматера даты, вы можете установить строку формата даты, и форматер даты будет работать согласованно для всех пользователей.
Приведенную выше информацию и многое другое можно найти в Apple Технический Q & A QA1480
Вот фрагмент кода из моего приложения, который реализует приведенную выше рекомендацию:
static NSDateFormatter* dateFormatter = nil;
if (!dateFormatter) {
dateFormatter = [[NSDateFormatter alloc] init];
NSLocale *enUSPOSIXLocale = [[[NSLocale alloc]
initWithLocaleIdentifier:@"en_US_POSIX"] autorelease];
assert(enUSPOSIXLocale != nil);
[dateFormatter setLocale:enUSPOSIXLocale];
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
dateFormatter.dateFormat = @"EEE, dd MMM yyyy HH:mm:ss +0000";
}