Saltar al contenido principal

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íaFormatoDescripción
Año (y)yyyyAño completo en 4 dígitos (ej. 2023).
yyÚltimos 2 dígitos del año (ej. 23 para 2023).
Mes (M)MMMes en 2 dígitos, con ceros a la izquierda cuando es necesario (ej. 01 para enero).
MMMNombre abreviado del mes (ej. Jan, Feb, etc.).
MMMMNombre completo del mes (ej. January, February, etc.).
MMes en 1 o 2 dígitos sin ceros a la izquierda (ej. 1 para enero, 11 para noviembre).
Día del mes (d)ddDía del mes en 2 dígitos (ej. 01, 02, ..., 31).
dDía del mes en 1 o 2 dígitos (ej. 1, 2, ..., 31).
Día del año (D)DDía del año en 1 a 3 dígitos (ej. 1 para el 1 de enero, 365 para el 31 de diciembre).
DDDDía del año en 3 dígitos (ej. 001, 002, ..., 365).
Día de la semana (E)ENombre abreviado del día de la semana (ej. Mon, Tue, Wed).
EEEENombre completo del día de la semana (ej. Monday, Tuesday, etc.).
Semana (w, W)wSemana del año (ej. 1 a 52).
WSemana del mes (ej. 1 a 5).
Día de la semana en la semana (e, c)eDía de la semana como número (1 para lunes, ..., 7 para domingo), de acuerdo con el Locale.
cDía de la semana en 1 dígito, igual que e.
Período del día (a)aPeríodo del día, AM o PM (ej. AM, PM).
Hora (H, h, k, K)HHHora en formato de 24 horas, en 2 dígitos (ej. 00-23).
HHora en formato de 24 horas, en 1 o 2 dígitos (ej. 0-23).
hhHora en formato de 12 horas, en 2 dígitos (ej. 01-12).
hHora en formato de 12 horas, en 1 o 2 dígitos (ej. 1-12).
kkHora en formato de 24 horas, donde 1 es la 1 AM y 24 es la medianoche (ej. 01-24).
KHora en formato de 12 horas, donde 0 es medianoche o mediodía (ej. 0-11).
KKHora en formato de 12 horas, 2 dígitos (ej. 00-11).
Minuto (m)mmMinuto en 2 dígitos (ej. 00-59).
mMinuto en 1 o 2 dígitos (ej. 0-59).
Segundo (s)ssSegundo en 2 dígitos (ej. 00-59).
sSegundo en 1 o 2 dígitos (ej. 0-59).
Zona horaria (z, Z, X)zZona horaria general (ej. PST, CET).
ZZona horaria con formato de desfase de +/- horas y minutos (ej. -0800).
ZZZZona horaria en 4 dígitos (ej. -0800, -0530).
XZona 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"));