Le contaba a Francis, un amigo de toda la vida, que una vez me tocó trabajar en una aplicación que requería registrar eventos en múltiples husos horarios y con diferentes formatos. Para mí fue un tormento, porque no sabía bien cómo hacerlo y trataba de hacerlo todo manual. Él, muy amablemente, me contó sobre java.time.format.DateTimeFormatter e iluminó mi camino inmediatamente. Al fin pude simplificar mi vida como desarrollador y ahorrar tiempo al trabajar con fechas y horas en Java. Voy a mostrarte cómo se usa para que también lo pongas en práctica cuanto antes.
¿Qué es Java.time.format.DateTimeFormatter?
Quiero que pienses en el trabajo que hace un traductor: convierte un texto de un idioma a otro para que se pueda entender, ¿verdad? Lo mismo hace java.time.format.DateTimeFormatter, ya que es una clase que toma una fecha y hora y la convierte a un formato específico que tú entiendas. De hecho, puede ser en diferentes estilos, como “dd-MM-yyyy”, “yyyy/MM/dd HH:mm:ss”, etc.
Entonces, esta clase de Java te permite formatear y analizar objetos de fecha y hora, como LocalDate, LocalDateTime o ZonedDateTime, utilizando patrones predefinidos o personalizados.
Así que, podríamos decir que este traductor (DateTimeFormatter) te servirá para interpretar y convertir cadenas de texto de fechas y horas que un usuario ingresa, a objetos LocalDateTime u otros objetos de fecha y hora.
Otro escenario en el que lo podrías aprovechar, sería para las configuraciones regionales, porque te mostraría fechas y horas en el formato adecuado, según las convenciones locales de diferentes regiones del mundo.
Características
- Flexibilidad: Soporta patrones predefinidos y personalizados.
- Inmutabilidad
- Seguridad en hilos: Su diseño inmutable la hace ideal para entornos concurrentes
- Compatibilidad: Permite trabajar con múltiples clases de la API de fechas y horas de Java.
Cómo usar Java.time.format.DateTimeFormatter
Formatear fechas y horas
Te contaba al principio que, puedes usar patrones predefinidos o personalizados para formatear fechas y horas. Voy a mostrarte cómo hacerlo con un ejemplo básico:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class FormatoFechas {
public static void main(String[] args) {
// Crear un objeto DateTimeFormatter con un patrón personalizado
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss");
// Obtener la fecha y hora actuales
LocalDateTime ahora = LocalDateTime.now();
// Formatear la fecha
String fechaFormateada = ahora.format(formatter);
System.out.println("Fecha formateada: " + fechaFormateada);
}
}
Puedes ver que, en este caso, el formato utilizado es dd/MM/yyyy HH:mm:ss, que muestra el día, mes, año, hora, minutos y segundos.
Patrones personalizados comunes
Quiero dejarte una lista de algunos patrones que puedes usar:
- yyyy-MM-dd: Fecha en formato ISO (2025-01-07).
- dd/MM/yyyy: Fecha en formato común europeo (07/01/2025).
- EEEE, MMM dd, yyyy HH:mm:ss a: Día completo, mes, día, año, hora con AM/PM (martes, ene 07, 2025 10:30:45 AM).
Cómo convertir texto a fecha
En este ejemplo he decidido mostrarte que, si necesitas analizar una cadena para convertirla en un objeto de fecha y hora, puedes usar el método parse:
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class ParsearFechas {
public static void main(String[] args) {
String fechaTexto = "07/01/2025 10:30:45";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss");
// Convertir texto a LocalDateTime
LocalDateTime fecha = LocalDateTime.parse(fechaTexto, formatter);
System.out.println("Fecha parseada: " + fecha);
}
}
Uso de patrones predefinidos
Ten en cuenta que, la clase DateTimeFormatter incluye varios patrones predefinidos que puedes usar directamente, como ISO_DATE o RFC_1123_DATE_TIME.
Aquí tienes un ejemplo muy fácil de entender:
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
public class PatronesPredefinidos {
public static void main(String[] args) {
ZonedDateTime ahora = ZonedDateTime.now();
// Usar el patrón ISO_DATE_TIME
String fechaIso = ahora.format(DateTimeFormatter.ISO_DATE_TIME);
System.out.println("Fecha en formato ISO: " + fechaIso);
}
}
Más allá de lo básico: Construir patrones complejos
Por supuesto, puede que en algún momento necesites formatos más avanzados, entonces puedes usar DateTimeFormatterBuilder para personalizarlos.
Te muestro en este código cómo sería:
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
public class PatronesComplejos {
public static void main(String[] args) {
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd HH:mm:ss")
.optionalStart()
.appendZoneOrOffsetId()
.optionalEnd()
.toFormatter();
ZonedDateTime ahora = ZonedDateTime.now();
System.out.println("Fecha con zona horaria: " + ahora.format(formatter));
}
}
Ahora ya estás al tanto de que Java.time.format.DateTimeFormatter es esencial para cualquier desarrollador que trabaje con fechas y horas en Java. De verdad que es grandiosa su capacidad de formatear y analizar fechas de manera flexible y segura. Por eso se ha convertido en un recurso indispensable.
¿Te gustaría dominar herramientas como Java.time.format.DateTimeFormatter y mucho más? En KeepCoding te ofrecemos un Bootcamp de Java Full Stack diseñado para llevarte de cero a experto en tiempo récord. ¡Apúntate hoy mismo y comienza a transformar tu futuro en el sector IT!