Как включить в приложение достаточно данных о локали, чтобы можно было форматировать даты в трех локалях? - PullRequest
0 голосов
/ 22 ноября 2010

Я бы хотел иметь возможность форматировать java.util.Date объекты в "длинном" английском, испанском и немецком формате даты.Под "long" я подразумеваю зависящий от локали формат даты, который соответствует константе шаблона стиля LONG в java.text.DateFormat:

DateFormat.getDateInstance(DateFormat.LONG, myLocale).format(myDate);

При стандартной JRE я получаю датутакие строки, как:

November 22, 2010
22 de noviembre de 2010
22. November 2010

, как и ожидалось.В Android 1.5, однако, я получаю:

November 22, 2010
2010 11 22
2010 11 22

Есть ли способ, с помощью которого я могу включить в приложение достаточно информации о локали, чтобы можно было правильно форматировать даты в длинном английском, испанском и немецком форматах, используяjava.text.DateFormat

1 Ответ

0 голосов
/ 22 ноября 2010

Прежде всего, форматирование дат в JRE известно некорректным поведением во многих локалях (недопустимые длинные польские, чешские и русские даты, недопустимые короткие польские даты; и это только примеры того, что я точно знаю).Поэтому я бы не стал сильно доверять этому источнику информации.

Если вы хотите реализовать собственную логику форматирования длинных дат, я бы сделал следующее:

String spanishDatePattern = "{0,number,00} {1} {2,number,####}";
String spanishLongDateMonthNameNovember = "de noviembre de";

Object[] arguments = { new Integer(date.getDate()),
                       spanishLongDateMonthNameNovember,
                       new Integer(date.getYear()) };
String formattedDate = MessageFormat.format(spanishDatePattern,
                arguments);

В этом случае выпотребуется 13 сообщений на каждый язык (12 месяцев ~ имена и 1 шаблон).Думаю, не так уж и много.

Конечно, это был всего лишь пример, в действительности вам, вероятно, понадобится добавить логику для разрешения названий месяцев (с ключами, имена которых заканчиваются на номер месяца, т.е. longDateFormatMonthName.0 =январь?).

...