У меня есть небольшое приложение для Android, которое я использую для печати определенной даты в разных форматах на основе языка.
Вот мой код (используя java.text.DateFormat
):
Locale[] locales = {new Locale("en", "US"), new Locale("en", "GB"), new Locale("en", "AU"), new Locale("en", "NZ"), new Locale("en", "ZA")};
for(int i = 0; i < locales.length; ++i) {
Log.d(logKey, locales[i].toString() + " - " + DateFormat.getDateInstance(DateFormat.SHORT, locales[i]).format(Calendar.getInstance().getTime()));
}
Таким образом, вывод из этого в LogCat:
D/FormatPoC( 390): en_US - 4/27/12
D/FormatPoC( 390): en_GB - 4/27/12
D/FormatPoC( 390): en_AU - 4/27/12
D/FormatPoC( 390): en_NZ - 4/27/12
D/FormatPoC( 390): en_ZA - 4/27/12
Итак, мой вопрос: почему все они одинаковы? В Java SE я получаю:
en_US - 4/27/12
en_GB - 27/04/12
en_AU - 27/04/12
en_NZ - 27/04/12
en_ZA - 2012/04/27
Это то, чего я ожидал бы. Я знаю, что я могу использовать android.text.format.DateFormat
для получения правильных результатов на основе текущей настройки языка и даты, но это не объясняет, почему использование java.text.DateFormat
для получения формата для программно заданного языкового стандарта не возвращает права результаты.
Кроме того, не только формат даты SHORT
- MEDIUM
и LONG
показывают несоответствия между Android и Java SE (т.е. Android возвращает тот же формат для всех 5 локалей, которые я указал).
Я тестировал его на 3 разных устройствах (2.3 и 4.0) и на эмуляторе (2.3 и 4.0), все с одинаковыми результатами. Я также тестировал с помощью Locale.US
и Locale.UK
только для того, чтобы узнать, чем они отличаются друг от друга, но результаты одинаковы.
Кто-нибудь еще сталкивается с этим или знает, почему это было бы?
ОБНОВЛЕНИЕ: 2012-07-18
Похоже, что это проблема с эмулятором, а также со многими устройствами, произведенными в США. Использование Исследователя Dalvik:
https://play.google.com/store/apps/details?id=org.jessies.dalvikexplorer&hl=en
Я смог увидеть, что система возвращает для en_GB на разных устройствах (включая эмулятор). Некоторые возвращают соответствующие форматы, некоторые возвращают формат en_US. Я предполагаю, что это просто проблема того, какие ресурсы формата встроены в ОС для каждого устройства, хотя, поскольку эмулятор возвращает неправильные форматы, а также многие из моих устройств, изготовленных в США, мне интересно, что думают британские разработчики, или если они Мы видели эту проблему.