1. Clase DateTimeFormatter

La clase especial DateTimeFormatterencuentra su camino en la API de fecha y hora. Su propósito es facilitar al máximo a los programadores la conversión de una fecha y hora al formato exacto que deseen. Y nos complace informar que los creadores de Java lo lograron.

Usarlo es muy fácil. Primero, debe crear una DateTimeFormatterclase y pasar un patrón que especifique cómo mostrará la fecha y la hora:

DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern);

Donde dtfes una DateTimeFormattervariable. es un método estático de la clase. Y el patrón es una cadena que especifica el patrón que se usará para mostrar la fecha y la hora.DateTimeFormatter.ofPattern()DateTimeFormatter

Ejemplos

Código Salida de consola
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MM-dd-yy");
String text = dtf.format( LocalDateTime.now() );
System.out.println(text);


02-22-19

En el ejemplo anterior, usamos el ofPattern()método para crear un DateTimeFormatterobjeto basado en el patrón. Y en la siguiente línea, usamos el format()método para convertir un LocalDateTimeobjeto en una cadena. Ves el resultado en la pantalla.

Puede pasar casi cualquier objeto de la API de fecha y hora al format()método.

El estático ofPattern()también es muy simple: toma un patrón como argumento y devuelve un DateTimeFormatterobjeto. La parte más interesante se encuentra en el patrón.


2. Patrón de formato

La cadena pasada como patrón se usa como patrón cuando se muestra información. MM se reemplaza por el número del mes, dd por el día del mes e yy por el número del año. El caso de las cartas importa.

La tabla completa para estos patrones de tiempo es esta:

Carta Significado
y Año
METRO Mes
d Día
H Horas
metro Minutos
s Segundos
S Milésimas de segundo
norte Nanosegundos.

No es particularmente difícil de recordar.

Pero, ¿por qué el patrón del ejemplo incluye letras repetidas MM, dd e yy? Bueno, aquí es donde se pone más interesante.

Idea general

El número de letras afecta la longitud del texto. Cuantas más letras haya, más largo será el texto.

Si la letra H se especifica una vez, las 9 horas se mostrarán como 9, pero si la letra H se especifica dos veces seguidas, las 9 horas se mostrarán como 09.

Si la letra y se especifica 2 veces seguidas, entonces el año se escribe con 2 dígitos. Si ocurre 4 veces seguidas, entonces se usan 4 dígitos.

Si la letra M se especifica 2 veces seguidas, se escribe el número del mes. Si 3 veces seguidas, entonces se usa el nombre del mes (sus primeras 3 letras). Si 4 veces seguidas, se usa el nombre completo del mes.

Ejemplo:

Código Salida de consola
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMMM-dd-yyyy");
String text = dtf.format( LocalDateTime.now() );
System.out.println(text);


February-22-2019


3. Tabla completa de patrones

La tabla completa es bastante grande y súper interesante:

Patrón variaciones del patrón Ejemplo Descripción
y yy, yyyy 19; 2019 Año
L/M M, MM, MMM, MMMM, MMMMM 1; 01; Ene; Enero; j Mes
d d, dd 9; 09 Día
H H, HH 2; 02 Horas
metro mmm 3; 03 Minutos
s s, ss 5; 05 Segundos
S S, SS, SSS, ... 1; 12; 123 Milésimas de segundo
norte norte 123456789 nanosegundos
GRAMO G, GGGG, GGGGG ANUNCIO; De nueva era; A; Era
P/q q, qq, qqq, qqqq 3; 03; Q3; 3er trimestre Cuarto
w w 13 semana del año
W W 3 semana del mes
mi EEE, EEEE, EEEEE Lun; Lunes; METRO Día de la semana
CE e, ee, eee, eeee, eeeee 1; 01; Lun; Lunes; METRO Día de la semana
a a PM Am o PM
h h 12 reloj de 12 horas.
V vv Europa/Helsinki Zona horaria
z z zzzz EET; Hora estándar de Europa del Este Zona horaria
O OOOOO GMT+2; GMT+02:00 Zona horaria

Por cierto, esta no es en realidad una versión completa. Puedes encontrar la versión más completa aquí .



4. Tiempo de análisis

La DateTimeFormatterclase también es interesante por su capacidad no solo para convertir una fecha y hora en una cadena de acuerdo con un patrón determinado, sino también para realizar la operación inversa.

Analizar una cadena es el proceso de dividirla en tokens significativos.

Esto es lo que parece:

Código Salida de consola
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMMM-dd-yyyy");
LocalDate date = LocalDate.parse("February-23-2019", dtf);
System.out.println(date);


February-23-2019

Primero, creamos un DateTimeFormatterobjeto y establecemos el patrón que se usa para analizar.

Luego llamamos al método LocalDate.parse()o LocalTime.parse()o LocalDateTime.parse()y pasamos la cadena para analizarla junto con el DateTimeFormatterobjeto, que comprende cómo analizar el texto pasado y qué patrón debe usarse para hacerlo.

Otro ejemplo: esta vez analizaremos el tiempo.

Código Salida de consola
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss");
LocalTime time = LocalTime.parse("23:59:59", dtf);
System.out.println(time);


23:59:59