Formato de fecha Java para configuración regional

¿Cómo puedo encontrar el DateFormat para una DateFormat Locale determinada?

 DateFormat.getDateInstance(int,Locale) 

Por ejemplo:

 import static java.text.DateFormat.*; DateFormat f = getDateInstance(SHORT, Locale.ENGLISH); 

Luego puede usar este objeto para formatear la Date s:

 String d = f.format(new Date()); 

Si realmente quiere saber el patrón subyacente (por ejemplo, yyyy-MMM-dd ), entonces, como volverá a tener un objeto SimpleDateFormat :

 SimpleDateFormat sf = (SimpleDateFormat) f; String p1 = sf.toPattern(); String p2 = sf.toLocalizedPattern(); 

tl; dr

 DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL ) .withLocale( Locale.CANADA_FRENCH ); 

java.time

Las clases originales de fecha y hora ahora son heredadas y han sido suplantadas por las clases java.time.

DateTimeFormatter tiene una forma simple de localizar automáticamente por Locale al generar una cadena para representar el valor de fecha y hora. Especifique un FormatStyle para indicar la longitud del resultado (abreviado o no).

 DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL ); f = f.withLocale( Locale.CANADA_FRENCH ); 

Obtenga el momento actual. Tenga en cuenta que la Locale y la zona horaria no tienen nada que ver entre sí. Uno determina la presentación, el otro se ajusta a un reloj de pared en particular. Por lo tanto, puede tener un huso horario en Nueva Zelanda con una Locale de japonés, o en este caso un huso horario en India con una presentación formateada para que una persona quebequense lo lea.

 ZoneId z = ZoneId.of( "Asia/Kolkata" ); ZonedDateTime zdt = ZonedDateTime.now( z ); 

Genere una Cadena utilizando ese objeto formateador localizador.

 String output = zdt.format( f ); 

Acerca de java.time

El marco java.time está integrado en Java 8 y posterior. Estas clases suplantan a las problemáticas antiguas clases heredadas de fecha y hora como java.util.Date , Calendar y SimpleDateFormat .

El proyecto Joda-Time , ahora en modo de mantenimiento , aconseja la migración a las clases java.time .

Para obtener más información, consulte el Tutorial de Oracle . Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310 .

¿Dónde obtener las clases de java.time?

  • Java SE 8 , Java SE 9 y posterior
    • Incorporado.
    • Parte de la API Java estándar con una implementación integrada.
    • Java 9 agrega algunas características y correcciones menores.
  • Java SE 6 y Java SE 7
    • Gran parte de la funcionalidad de java.time se transfiere a Java 6 y 7 en ThreeTen-Backport .
  • Androide
    • El proyecto ThreeTenABP adapta ThreeTen-Backport (mencionado anteriormente) específicamente para Android.
    • Consulte Cómo utilizar ThreeTenABP ….

El proyecto ThreeTen-Extra amplía java.time con clases adicionales. Este proyecto es un terreno de prueba para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles aquí, como Interval , YearWeek , YearQuarter y más .

¿Hay alguna otra forma (sin utilizar el molde SimpleDateFormat) para recuperar el patrón predeterminado para un objeto de configuración regional determinado?

Tema relacionado