NSDateFormatter не будет анализировать даты, используя настройки локали? - PullRequest
0 голосов
/ 04 ноября 2008

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

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

Ответы [ 2 ]

3 голосов
/ 04 ноября 2008

Похоже, что NSDateFormatter нечувствителен к смене регионов.

Нет, он использует локаль в обоих направлениях.

Вы можете увидеть, как форматировщик интерпретировал дату, посмотрев описание даты (первое %@ в вашем формате NSLog).
Для региона в качестве США форматер интерпретировал дату как 2008- 07-04 (4 июля) .
При обозначении региона как GB форматер интерпретировал дату как 2008- 04-07 (7 апреля) .

Затем вы попросили тот же форматер в том же регионе отобразить эту дату.
4 июля в американском формате 07/04/2008 (ММ / ДД / ГГГГ).
7 апреля в формате GB: 07.04.2008 (ДД / ММ / ГГГГ).

0 голосов
/ 04 ноября 2008

Это выглядит правильно. В первом выходном примере форматированная строка даты - 4/4/200. Во вторых, это 04.07.2008.

Какую разницу вы ожидали?

Если вы не изменили настройки формата для предпочтительного формата даты в Соединенном Королевстве, я полагаю, что по умолчанию это MM / DD / YYYY с ведущими нулями для месяцев и дней меньше 10.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...