Tengo una pequeña aplicación de Android que estoy usando para imprimir una fecha específica en diferentes formatos según la configuración regional.¿Por qué java.text.DateFormat devuelve el mismo formato de fecha para en_US y en_GB en Android?
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 este en LogCat queda 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é son todos ellos de la misma? 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 esperaría. Sé que puedo usar android.text.format.DateFormat
para obtener resultados correctos en función de la configuración de orden de fecha y ubicación actual del usuario, pero eso no explica por qué el java.text.DateFormat
para obtener el formato para una configuración regional especificada programáticamente no devuelve los resultados correctos.
Además, no es sólo el formato de fecha SHORT
- MEDIUM
y LONG
muestran inconsistencias entre Android y Java SE, así (es decir, Android devuelve el mismo formato para los 5 Locales he especificado).
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 probé usando Locale.US
y Locale.UK
solo para ver si de alguna manera son diferentes, pero los resultados son los mismos.
¿Alguien más ha topado con esto, o sabe por qué sería esto?
ACTUALIZACIÓN: 2012-07-18
Parece que este es un problema con el emulador, así como muchos dispositivos fabricados en los EE.UU.. El uso de Dalvik Explorer:
https://play.google.com/store/apps/details?id=org.jessies.dalvikexplorer&hl=en
he sido capaz de ver lo que el sistema vuelve para en_GB en diferentes dispositivos (incluyendo el emulador). Algunos devuelven los formatos apropiados, algunos devuelven el formato en_US. Supongo que esto es simplemente una cuestión de qué formato de recursos están integrados en el sistema operativo para cada dispositivo, aunque el emulador devuelve los formatos incorrectos, así como muchos de mis dispositivos fabricados en EE. UU., Me pregunto qué piensan los desarrolladores británicos, o si han visto este problema
A pesar de que es casi exactamente lo que estoy haciendo (con la adición de otros lugares), me decidí probarlo. Los formatos de EE. UU. Y RU son iguales: "27 de abril de 2012". Esperaría que el Reino Unido sea "27 de abril de 2012". Los otros parecen válidos, aunque no soy francés, italiano ni japonés, así que no estoy 100% seguro. ;-) – mWillis
pero si obtiene el resultado correcto, haga pasar su Localizar como 'Locale.ITALY' en lugar de como nuevo Locale (" en "," GB "). –
Como dije en la pregunta, he usado 'Locale.UK' y' new Locale ("en", "GB") '- son iguales, y ambos devuelven el formato incorrecto. 'Locale.ITALY' no está dentro del alcance de lo que intento determinar. – mWillis