Formato de fechas y horas
La clase DateTimeFormatter en Java pertenece al paquete java.time.format y se utiliza para convertir objetos de fecha y hora a cadenas y viceversa. Es muy flexible y permite especificar un formato personalizado para fechas y horas, lo que es útil para presentar información temporal de manera amigable o para convertir una cadena de texto en un objeto de fecha y hora.
Es decir, DateTimeFormatter puede:
- Convertir objetos de fecha y hora (como
LocalDate,LocalTime,LocalDateTime) en cadenas de texto siguiendo un patrón específico. - Convertir cadenas de texto con fechas y horas en objetos temporales, asumiendo que las cadenas coinciden con el patrón especificado.
Puedes crear un DateTimeFormatter de diferentes formas:
-
Con patrones predefinidos:
DateTimeFormatter formatoISO = DateTimeFormatter.ISO_LOCAL_DATE; // Ejemplo: 2023-10-17
DateTimeFormatter formatoCompleto = DateTimeFormatter.ISO_LOCAL_DATE_TIME; // Ejemplo: 2023-10-17T14:30:00 -
Con patrones personalizados:
DateTimeFormatter formatoPersonalizado = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");
A continuación mostramos algunos ejemplos:
-
Convertir un objeto de fecha y hora en una cadena de texto:
LocalDateTime ahora = LocalDateTime.now();
DateTimeFormatter formato = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");
String fechaFormateada = ahora.format(formato);
System.out.println("Fecha y hora formateada: " + fechaFormateada); // Ejemplo: 17-10-2023 14:30:00 -
Convertir una cadena de texto en un objeto de fecha y hora:
String texto = "17-10-2023 14:30:00";
DateTimeFormatter formato = DateTimeFormatter.ofPattern("dd-MM-yyyy HH:mm:ss");
LocalDateTime fechaHora = LocalDateTime.parse(texto, formato);
System.out.println("Fecha y hora: " + fechaHora);
Patrones
Los patrones de DateTimeFormatter en Java utilizan una serie de caracteres especiales para definir cómo deben presentarse o interpretarse las componentes de fechas y horas. Aquí se detallan los principales caracteres y cómo se utilizan:
Algunos de los patrones más utilizados en DateTimeFormatter:
| Categoría | Formato | Descripción |
|---|---|---|
Año (y) | yyyy | Año completo en 4 dígitos (ej. 2023). |
yy | Últimos 2 dígitos del año (ej. 23 para 2023). | |
Mes (M) | MM | Mes en 2 dígitos, con ceros a la izquierda cuando es necesario (ej. 01 para enero). |
MMM | Nombre abreviado del mes (ej. Jan, Feb, etc.). | |
MMMM | Nombre completo del mes (ej. January, February, etc.). | |
M | Mes en 1 o 2 dígitos sin ceros a la izquierda (ej. 1 para enero, 11 para noviembre). | |
Día del mes (d) | dd | Día del mes en 2 dígitos (ej. 01, 02, ..., 31). |
d | Día del mes en 1 o 2 dígitos (ej. 1, 2, ..., 31). | |
Día del año (D) | D | Día del año en 1 a 3 dígitos (ej. 1 para el 1 de enero, 365 para el 31 de diciembre). |
DDD | Día del año en 3 dígitos (ej. 001, 002, ..., 365). | |
Día de la semana (E) | E | Nombre abreviado del día de la semana (ej. Mon, Tue, Wed). |
EEEE | Nombre completo del día de la semana (ej. Monday, Tuesday, etc.). | |
Semana (w, W) | w | Semana del año (ej. 1 a 52). |
W | Semana del mes (ej. 1 a 5). | |
Día de la semana en la semana (e, c) | e | Día de la semana como número (1 para lunes, ..., 7 para domingo), de acuerdo con el Locale. |
c | Día de la semana en 1 dígito, igual que e. | |
Período del día (a) | a | Período del día, AM o PM (ej. AM, PM). |
Hora (H, h, k, K) | HH | Hora en formato de 24 horas, en 2 dígitos (ej. 00-23). |
H | Hora en formato de 24 horas, en 1 o 2 dígitos (ej. 0-23). | |
hh | Hora en formato de 12 horas, en 2 dígitos (ej. 01-12). | |
h | Hora en formato de 12 horas, en 1 o 2 dígitos (ej. 1-12). | |
kk | Hora en formato de 24 horas, donde 1 es la 1 AM y 24 es la medianoche (ej. 01-24). | |
K | Hora en formato de 12 horas, donde 0 es medianoche o mediodía (ej. 0-11). | |
KK | Hora en formato de 12 horas, 2 dígitos (ej. 00-11). | |
Minuto (m) | mm | Minuto en 2 dígitos (ej. 00-59). |
m | Minuto en 1 o 2 dígitos (ej. 0-59). | |
Segundo (s) | ss | Segundo en 2 dígitos (ej. 00-59). |
s | Segundo en 1 o 2 dígitos (ej. 0-59). | |
Zona horaria (z, Z, X) | z | Zona horaria general (ej. PST, CET). |
Z | Zona horaria con formato de desfase de +/- horas y minutos (ej. -0800). | |
ZZZ | Zona horaria en 4 dígitos (ej. -0800, -0530). | |
X | Zona horaria en formato ISO (ej. -08, -0530, Z). |
Formato según el país
Puedes establecer un Locale para formatear fechas y horas según la convención de un país. Ejemplo:
DateTimeFormatter formato = DateTimeFormatter.ofPattern("dd MMMM yyyy", Locale.forLanguageTag("es"));