2012-04-27 26 views
10

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

Respuesta

1

probar 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)); 
+0

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

+0

pero si obtiene el resultado correcto, haga pasar su Localizar como 'Locale.ITALY' en lugar de como nuevo Locale (" en "," GB "). –

+0

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

4

Esta no es una respuesta (que todavía no tengo representante suficiente para agregar un comentario ...)

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

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

El programa DalvikExplorer también muestra el problema:

enter image description here

+0

¡Gracias por los comentarios! Es un problema tan extraño, porque he visto otros dispositivos que devuelven el formato adecuado para en_GB. – mWillis

+0

Sí de hecho. También lo intenté con un HTC Desire y eso funciona bien. –

Cuestiones relacionadas