Почему java.text.DateFormat возвращает один и тот же формат даты для en _US и en _GB на Android?

У меня есть небольшое приложение для 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. Я предполагаю, что это просто проблема того, какие ресурсы формата встроены в ОС для каждого устройства, хотя эмулятор возвращает неправильные форматы, как и многие из моих -устройств, произведенных в США, мне интересно что думают британские разработчики, или видели ли они эту проблему.

10
задан mWillis 18 July 2012 в 14:36
поделиться