Я пытаюсь проанализировать даты, используя настройки даты пользователя
[NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehavior10_4];
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateStyle:NSDateFormatterShortStyle];
NSDate *date = [ dateFormatter dateFromString:@"7/4/2008" ];
NSLog(@"string from date %@: %@ for locale %@", date, [dateFormatter stringFromDate:date], [[dateFormatter locale] localeIdentifier]);
Когда я устанавливаю свой регион (в настройках международной системы) на Соединенные Штаты, он печатает:
2008-08-14 20:20:31.117 Date Difference17226:10b string from date 2008-07-04 00:00:00 -0400: 7/4/08 for locale en_US
И когда мой регион - Великобритания, он печатает:
2008-08-14 20:19:23.441 Date Difference17199:10b string from date 2008-04-07 00:00:00 -0400: 07/04/2008 for locale en_GB
Похоже, NSDateFormatter нечувствителен к изменению регионов. Обратите внимание, что необработанная печать даты правильно переключается с регионом.
Что мне нужно сделать, чтобы NSDateFormatter уважал настройку региона?





Выглядит правильно. В первом примере вывода форматированная строка даты - 7/4/200. Во втором - 04.07.2008.
Какой разницы вы ожидали?
Если вы не меняли свои предпочтения формата для предпочтительного формата даты Соединенного Королевства, я считаю, что по умолчанию используется ММ / ДД / ГГГГ с ведущими нулями для месяцев и дней меньше 10.
It looks like the NSDateFormatter is insensitive to the change of regions.
Нет, языковой стандарт используется в обоих направлениях.
Вы можете увидеть, как форматировщик интерпретировал дату, посмотрев на описание даты (первый %@ в вашем формате NSLog).
Если регион указан как США, модуль форматирования интерпретировал дату как 2008-07-04 (4 июля).
.
С регионом как GB средство форматирования интерпретировало дату как 2008-04-07 (7 апреля).
Затем вы попросили тот же модуль форматирования в том же регионе отобразить эту дату.
4 июля в американском формате - 04.07.2008 (ММ / ДД / ГГГГ) .
7 апреля в формате GB - 04.07.2008 (ДД / ММ / ГГГГ).