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