A menudo creo SimpleDateFormat con patrones como HH:mm:ss
o yyyy-MM-dd
para dar salida a las fechas en una configuración regional de manera independiente. Dado que también hay un constructor que toma un parámetro de configuración regional adicional, me pregunto si hay casos en los que dicho formato puede depender de la configuración regional, o si siempre debo especificar Locale.ENGLISH o Locale.GERMANY. Supongamos que la zona horaria está configurada explícitamente.¿Depende de la configuración regional SimpleDateFormat?
Respuesta
acaba de encontrar el método estático getAvailableLocales
en la configuración regional, y resulta que todos los campos de un calendario puede ser depende del local:
public static void main(String[] args) {
String pattern = "yyyy-MM-dd HH:mm:ss";
Date date = new Date();
String defaultFmt = new SimpleDateFormat(pattern).format(date);
for (Locale locale : Locale.getAvailableLocales()) {
String localeFmt = new SimpleDateFormat(pattern, locale).format(date);
if (!localeFmt.equals(defaultFmt)) {
System.out.println(locale + " " + localeFmt);
}
}
}
En mi sistema (en Alemania que ejecuta una versión Inglés de ubuntu), este emite la siguiente lista, esperemos que el carácter unicode vienen a través intacta:
ja_JP_JP 23-03-03 16:53:09
hi_IN २०११-०३-०३ १६:५३:०९
th_TH 2554-03-03 16:53:09
th_TH_TH ๒๕๕๔-๐๓-๐๓ ๑๖:๕๓:๐๙
Así Japan y Thailand utiliza una época diferente, pero ar De lo contrario, se basa en el gregorian calendar, lo que explica por qué el mes y el día son los mismos.
Otras configuraciones regionales también usan scripts diferentes para escribir números, por ejemplo Hindi hablados en India y una variante de tailandés en Tailandia.
Para responder a la pregunta, la configuración regional siempre debe especificarse a un valor conocido cuando se necesita una cadena independiente de configuración regional.
Editar: Java 1.6 agregó una constante Locale.ROOT para especificar un idioma/país neutral. Esto sería preferible a especificar la configuración regional en inglés para la salida dirigida a una computadora.
La configuración regional de la raíz es la configuración regional cuyo idioma, país y variante son cadenas vacías (""). Esto se considera como la configuración regional base de todas las configuraciones regionales, y se utiliza como la configuración regional de idioma/país neutral para las operaciones sensibles de la configuración regional.
Sí, SimpleDateFormat
es absolutamente sensible a la configuración regional. Ciertos campos, como horas y minutos, son independientes de la configuración regional.
SimpleDateFormat
también soporta localizadas fecha y hora patrón cuerdas. En estas cadenas, las letras de patrón descritas anteriormente pueden reemplazarse por otras letras de patrón dependientes de la configuración regional.SimpleDateFormat
no se ocupa de la localización de texto que no sean las letras de patrón; eso depende del cliente de la clase.
O bien, puede utilizar el método DateFormat#getDateInstance()
fábrica de localización de usar en su lugar, ya que:
public SimpleDateFormat(String pattern, Locale locale)
Construye un
SimpleDateFormat
utilizando el patrón dado y los símbolos de formato de fecha por defecto de la localidad dada . Nota: Este constructor puede no ser compatible con todas las configuraciones regionales. Para una cobertura completa, use los métodos de fábrica en la claseDateFormat
.
Esto funciona para mí, tal vez deberías probarlo: salida
String time = new SimpleDateFormat("HH:mm:ss").format(new Date());
Consola:
11:52:45
- 1. Java: el formato de flotación depende de la configuración regional
- 2. Can isdigit legítimamente depende de la configuración regional en C
- 3. Configuración de la configuración regional de Java
- 4. Obtener la cadena de la configuración regional predeterminada mediante una cadena en la configuración regional específica
- 5. cambiar la configuración regional de la fecha
- 6. Configuración regional en Android
- 7. "atof" independiente de la configuración regional?
- 8. conversión de cadena doble y configuración regional
- 9. Nombres de configuración regional válidos
- 10. Cambiar la configuración de idioma (configuración regional) para el dispositivo
- 11. Grails cómo cambiar la configuración regional actual
- 12. Git GUI: cómo cambiar la configuración regional
- 13. ¿Falta la configuración regional en Java?
- 14. Cambiar la configuración regional predeterminada en Symfony2
- 15. La configuración regional no existe en Java
- 16. String.Format considere la configuración regional o no?
- 17. Tapiz: página de inicio use configuración regional en inglés en lugar de configuración regional predeterminada
- 18. Código de configuración regional para hebreo/¿Referencia a otros códigos de configuración regional?
- 19. Formulario de configuración regional múltiple de Globalize3
- 20. PHP: formato de número de configuración regional
- 21. Caracteres de índice específicos de configuración regional
- 22. Advertencia de configuración regional de Perl Debian
- 23. establecer catalina depende de la configuración de tomcat
- 24. Formato de fecha Java para configuración regional
- 25. Implementación de strtod independiente de la configuración regional
- 26. Forma correcta de realizar la comparación de configuración regional
- 27. Inicie la aplicación con la configuración regional específica
- 28. Rails 3, la configuración regional de i18n no funciona
- 29. Formateo de direcciones basado en la configuración regional en android
- 30. Cambiar la configuración regional en tiempo de ejecución en Swing
estoy preguntando por los patrones que no contienen cualquier mes o nombres de día, por ejemplo 'aaaa-MM-dd', y deseo una salida independiente de configuración regional, posiblemente guardando algunas teclas al omitir el parámetro de configuración regional. –
@ Jörn: ¡ah! En ese ejemplo específico, no debería tener problemas para omitir el parámetro adicional. El formateo de zonas horarias puede ser una historia diferente, sin embargo. Aún así, es mejor dejar que Java se preocupe por los formatos específicos de la configuración regional (por ejemplo, decidir cuándo usar 'mm/dd/aaaa' frente a' dd/mm/aaaa'). –
He tomado el hábito de especificar siempre una configuración regional (al menos cuando la aplicación no es una aplicación cliente donde siempre se usa la configuración regional del sistema), para asegurarme de que yo (u otra persona) no olvide especificar uno si el patrón tuvo que cambiar. Un poco como la regla de usar siempre corchetes alrededor de los bloques, incluso si solo tiene una línea. –