¿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
):
- ¿Cómo saber cuándo ha terminado de reproducir el objeto AudioTrack?
- ¿Por qué LinearLayout instance.getLayoutParams busca tener una clase incorrecta?
- Error: Error de ejecución para la tarea ': app: transformClassesWithMultidexlistForDebug'
- Android: rotar una imagen de alta resolución genera un error de memoria insuficiente
- Registrar un botón de auriculares haga clic con BroadcastReceiver en Android
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 SHORT
– MEDIUM
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.
- MQTT vs. XMPP ¿Qué debo elegir?
- Importar paquetes android no puede ser resuelto
- ¿Cómo hacer vibrar un dispositivo Android?
- No se puede crear el convertidor para la clase com.squareup.okhttp.ResponseBody
- Imagebutton establecer el tamaño de la imagen
- Error al seleccionar texto de Textview (java.lang.IndexOutOfBoundsException: setSpan (-1 ... -1) comienza antes de 0)
- <? Extiende A> no aceptará las clases infantiles de A
- ¿Cómo puedo incluir dependencias en mi biblioteca de Android?
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:
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));
- ¿Cuál es la diferencia entre abrir una aplicación desde la pantalla de aplicaciones y la lista de aplicaciones utilizadas recientemente? (androide
- SoapFault – código de error: '1062' faultstring: 'Método de envío no está disponible'