¿Por qué java.text.DateFormat devuelve el mismo formato de fecha para en_US y en_GB en Android?

Tengo una pequeña aplicación de Android que estoy usando para imprimir una fecha específica en diferentes formatos basados ​​en la configuración regional.

Aquí está mi código (usando 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())); } 

La salida de esto en LogCat es así:

 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 

Así que mi pregunta es – ¿por qué todos estos son los mismos? En Java SE obtengo:

 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 

Que es lo que me esperaba. Sé que puedo usar android.text.format.DateFormat para obtener resultados correctos basados ​​en la configuración regional y local actual del usuario, pero eso no explica por qué usar java.text.DateFormat para obtener el formato de un entorno regional especificado mediante programación No devuelve los resultados correctos.

Además, no es sólo el formato de fecha SHORTMEDIUM y LONG muestran inconsistencias entre Android y Java SE (Android devuelve el mismo formato para todos los 5 locales especificados).

Lo he probado en 3 dispositivos diferentes (2.3 y 4.0) y en el emulador (2.3 y 4.0), todos con los mismos resultados. También he probado usando Locale.US y Locale.UK sólo para ver si son de alguna manera diferentes, pero los resultados son los mismos.

¿Alguien más se ha topado con esto, o sabe por qué sería?

ACTUALIZACIÓN: 2012-07-18

Parece que este es un problema con el emulador, así como muchos dispositivos fabricados en los EE.UU. Uso de Dalvik Explorer:

Https://play.google.com/store/apps/details?id=org.jessies.dalvikexplorer&hl=en

He podido ver lo que el sistema devuelve para en_GB en diferentes dispositivos (incluido el emulador). Algunos devuelven los formatos apropiados, algunos devuelven el formato en_US. Supongo que esto es simplemente un problema de los recursos de formato que se construyen en el sistema operativo para cada dispositivo, a pesar de que el emulador devuelve los formatos erróneos, así como muchos de mis dispositivos fabricados en Estados Unidos, me pregunto lo que piensan los desarrolladores británicos, o si He visto este problema.

Esto no es una respuesta (todavía no tengo suficiente representante para agregar un comentario …)

Como desarrollador del Reino Unido me he encontrado con este problema. Estoy viendo este problema con mi Galaxy S3, exactamente como usted ha descrito.

Tengo que recurrir a permitir que el usuario elija el formato de fecha como una preferencia. No muy bueno.

El programa de DalvikExplorer también muestra el problema:

Introduzca aquí la descripción de la imagen

prueba esto:

  int style = DateFormat.MEDIUM; //Also try with style = DateFormat.FULL and DateFormat.SHORT Date date = new Date(); DateFormat df; df = DateFormat.getDateInstance(style, Locale.UK); Log.d("Locale.UK","Locale.UK - "+df.format(date)); System.out.println("United Kingdom: " + df.format(date)); df = DateFormat.getDateInstance(style, Locale.US); Log.d("Locale.US","Locale.US - "+df.format(date)); df = DateFormat.getDateInstance(style, Locale.FRANCE); Log.d("Locale.FRANCE","Locale.FRANCE - "+df.format(date)); df = DateFormat.getDateInstance(style, Locale.ITALY); Log.d("Locale.ITALY","Locale.ITALY - "+df.format(date)); df = DateFormat.getDateInstance(style, Locale.JAPAN); Log.d("Locale.JAPAN","Locale.JAPAN - "+df.format(date)); 
  • Cómo configurar el volumen de llamada entrante mediante programación en android?
  • Impresión NFC desde la aplicación para Android
  • Error de Android NDK ndk-build helloJni
  • Android.support.v4.util.Pair vs android.util.Pair
  • Android: acelerar la transición de elementos compartidos entre actividades
  • Java Runtime.getRuntime (). Exec () falla después de llamarla varios cientos de veces
  • El código no funciona, el botón no responde
  • Recortar texto cuando se ingresan muchas teclas de espacio al final
  • Cómo utilizar parámetros con HttpPost
  • Android Alert Dialog Fondo de aplicación API 11+
  • Cómo utilizar FirebaseInstanceId.getInstance (). DeleteInstanceId ()?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.