NSDateFormatter не будет анализировать даты с использованием настроек локали?

Я пытаюсь проанализировать даты, используя настройки даты пользователя

[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 уважал настройку региона?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
1 821
2

Ответы 2

Выглядит правильно. В первом примере вывода форматированная строка даты - 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 (ДД / ММ / ГГГГ).

Другие вопросы по теме