Java SimpleDateFormat – Java Formato de Fecha

Introducción

Las clases SimpleDateFormat y DateFormat de Java se utilizan para el formato de fechas. Se utilizan principalmente cuando necesitamos mostrar o utilizar la funcionalidad de fecha y hora de Java. Ambas clases están presentes en el paquete com.text.

Java DateFormat

  • DateFormat se utiliza para formatear una fecha en una cadena (String) según la ubicación específica proporcionada como entrada.
  • La ubicación se utiliza para especificar la región e idioma, haciendo que el código sea más localizado para el usuario.
  • La forma de escribir la fecha es diferente en distintas regiones del mundo. Por ejemplo, 31 de diciembre de 2017 se escribirá en India como 31-12-2017, pero en los Estados Unidos de América se escribirá como 12-31-2017.
  • Las clases DateFormat no están sincronizadas; se recomienda crear una instancia separada para cada hilo.

A DateFormat object can be created using the getDateInstance() and getTimeInstance() method of the DateFormat class.

Locale loc = new Locale("en", "US");
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, loc);

Nota: El constructor Locale(String, String) está obsoleto desde la versión 19.

Locale loc = new Locale.Builder().setLanguage("en").setRegion("US").build();

El método getDateInstance de DateFormat necesita dos parámetros de entrada. El primer parámetro especifica el DateFormat a utilizar y el segundo parámetro es la configuración regional.

Usando format

La clase DateFormat tiene un método format que se encarga de formatear.

Locale locale = new Locale("fr", "FR");
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.DEFAULT, locale);
String date = dateFormat.format(new Date());
System.out.print(date);

Este código formateará la fecha en francés (fr) y en la región de Francia (FR):

Output
3 janv. 2018

Usando getTimeInstance()

Para crear una instancia de DateFormat estamos utilizando el método getDateInstance().

Para realizar un formato de tiempo, necesitamos una instancia de tiempo. Utilizaremos el método getTimeInstance() para obtener una instancia de tiempo.

Locale locale = new Locale("fr", "FR");
DateFormat dateFormat = DateFormat.getTimeInstance(DateFormat.DEFAULT, locale);
String date = dateFormat.format(new Date());
System.out.print(date);

Este código formateará el tiempo en francés (fr) y en la región de Francia (FR):

Output
11:03:01

Java SimpleDateFormat

SimpleDateFormat es similar a DateFormat. La única diferencia importante entre ellos es que SimpleDateFormat se puede usar para el formato (conversión de Date a String) y para el análisis (String a conversión de Date) con soporte de idioma, mientras que DateFormat no tiene soporte de idioma. DateFormat es una clase abstracta que proporciona soporte base para el formato y análisis de fechas. SimpleDateFormat es la clase concreta que extiende la clase DateFormat.

SimpleDateFormat se puede crear utilizando el constructor SimpleDateFormat. El constructor es un constructor parametrizado y necesita un patrón de tipo String como parámetro.

String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);

El pattern de tipo String es el patrón que se utilizará para dar formato a una fecha y la salida se generará en ese patrón como “MM-dd-yyyy“.

Patrones

Echemos un vistazo a la sintaxis del patrón que se debe utilizar para el formato.

Letter for Pattern Date or Time component Examples
G Era designator AD
y Year 2018 (yyyy), 18 (yy)
M Month in year July (MMMM), Jul (MMM), 07 (MM)
w Results in week in year 16
W Results in week in month 3
D Gives the day count in the year 266
d Day of the month 09 (dd), 9(d)
F Day of the week in month 4
E Day name in the week Tuesday, Tue
u Day number of week where 1 represents Monday, 2 represents Tuesday and so on 2
a AM or PM marker AM
H Hour in the day (0-23) 12
k Hour in the day (1-24) 23
K Hour in am/pm for 12 hour format (0-11) 0
h Hour in am/pm for 12 hour format (1-12) 12
m Minute in the hour 59
s Second in the minute 35
S Millisecond in the minute 978
z Timezone Pacific Standard Time; PST; GMT-08:00
Z Timezone offset in hours (RFC pattern) -0800
X Timezone offset in ISO format -08; -0800; -08:00

Algunas letras deben usarse en diferentes cantidades para obtener resultados diferentes, como en el caso del mes:

Type Pattern Example Output
Full Month MMMM July
Abbreviated Month MMM Jul
Numeric Month MM 07

Ejemplos

Ahora veamos algunos ejemplos de diferentes formatos de fecha y hora.

Pattern Result
MM/dd/yyyy 01/02/2018
dd-M-yyyy hh:mm:ss 02-1-2018 06:07:59
dd MMMM yyyy 02 January 2018
dd MMMM yyyy zzzz 02 January 2018 India Standard Time
E, dd MMM yyyy HH:mm:ss z Tue, 02 Jan 2018 18:07:59 IST

Usando SimpleDateFormat()

Para analizar una fecha, necesitamos crear una instancia de SimpleDateFormat utilizando el constructor y luego usar el método format():

String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(new Date());
System.out.println(date);

Este código imprimirá ” MM-dd-yyyy “:

Output
01-02-2018

Este patrón produce “mes en año”, “día en mes” y “año”. El tipo de carácter (y mayúsculas) y la cantidad de caracteres contribuyen a la cadena. El mes se representaría con dos dígitos, el día con dos dígitos y el año con cuatro dígitos.

Este código mostró la fecha “2 de enero de 2018″ como ” 01-02-2018 “.

Para analizar la hora, debemos cambiar el patrón al crear una instancia de SimpleDateFormat.

String pattern = "HH:mm:ss.SSSZ";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(new Date());
System.out.println(date);

Este código imprimirá ” HH:mm:ss.SSSZ “:

Output
13:03:15.454+0530

Este patrón produce “horas”, “minutos”, “segundos”, “milisegundos” y “desplazamiento de la zona horaria en horas (patrón RFC)”.

Este código mostró la hora como ” 13:03:15.454+0530 “.

Usando parse()

El análisis es la conversión de una cadena en una instancia de java.util.Date. Podemos analizar una cadena para obtener una instancia de fecha usando el método parse() de la clase SimpleDateFormat. Para analizar una cadena a fecha, necesitamos una instancia de la clase SimpleDateFormat y un patrón de cadena como entrada para el constructor de la clase.

String pattern = "MM-dd-yyyy";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = simpleDateFormat.parse("12-01-2018");
System.out.println(date);

Esto producirá una fecha (12-01-2018) sin una hora especificada:

Output
Sat Dec 01 00:00:00 IST 2018

Ahora veamos un ejemplo de SimpleDateFormat para analizar la hora.

String pattern = "HH:mm:ss";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
Date date = simpleDateFormat.parse("22:00:03");
System.out.println(date);

Esto producirá una hora (22:00:03) sin una fecha especificada:

Output
Thu Jan 01 22:00:03 IST 1970

Como no hemos especificado ninguna fecha, el programa consideró la época como la fecha (es decir, 01-ene-1970).

Usando Locale

Hemos trabajado con Locale como parte de DateFormat y hemos visto que los locales se usan según las regiones.

String pattern = "EEEEE MMMMM yyyy HH:mm:ss.SSSZ";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern, new Locale("fr", "FR"));
Date date = simpleDateFormat.format(new Date());
System.out.println(date);

Este código formateará la hora actual en francés (fr) y la región de Francia (FR):

Output
mardi janvier 2018 14:51:02.354+0530

El día y el mes se nombran en francés según el Locale proporcionado como entrada: mardi es “martes” y janvier es “enero”.

Conclusión

En este artículo, aprendiste sobre SimpleDateFormat y DateFormat de Java.

Referencia:

Source:
https://www.digitalocean.com/community/tutorials/java-simpledateformat-java-date-format