У меня есть небольшое приложение для 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 Explorer:
https://play.google.com/store/apps/details?id=org.jessies.dalvikexplorer&hl=en
я смог увидеть, что система возвращает для en _ГБ на разных устройствах (, включая эмулятор ). Некоторые возвращают соответствующие форматы, некоторые возвращают формат en _US. Я предполагаю, что это просто проблема того, какие ресурсы формата встроены в ОС для каждого устройства, хотя эмулятор возвращает неправильные форматы, как и многие из моих -устройств, произведенных в США, мне интересно что думают британские разработчики, или видели ли они эту проблему.