Trabajo con fechas en Java: revisión de las bibliotecas java.time, Joda-Time y Apache Commons

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con fechas en Java: resumen de bibliotecas y herramientas modernas



Trabajar con fechas y horas es una de las tareas más comunes en el desarrollo en Java. Durante mucho tiempo, las clases estándar java.util.Date y java.util.Calendar fueron incómodas, mutables y propensas a errores. Afortunadamente, la situación ha cambiado. En este resumen, analizaremos tres enfoques principales: el paquete integrado java.time, la biblioteca Joda-Time y las utilidades de Apache Commons Lang.



1. java.time (Java 8+) — el estándar moderno



A partir de Java 8, el paquete java.time, basado en las ideas de Joda-Time, se incorporó a la biblioteca estándar. Es la forma principal y recomendada de trabajar con fechas en proyectos nuevos.



Clases clave:

  • LocalDate — fecha sin hora (año, mes, día).
  • LocalTime — hora sin fecha (horas, minutos, segundos, nanosegundos).
  • LocalDateTime — combinación de fecha y hora.
  • ZonedDateTime — fecha y hora con zona horaria.
  • Instant — momento en el tiempo en UTC (legible por máquina).
  • Duration y Period — para trabajar con intervalos de tiempo.


Ejemplos de uso:

import java.time.*;import java.time.format.DateTimeFormatter;import java.time.temporal.ChronoUnit;

public class JavaTimeExample { public static void main(String[] args) { // Fecha y hora actuales LocalDate today = LocalDate.now(); LocalTime now = LocalTime.now(); System.out.println("Hoy: " + today); System.out.println("Ahora: " + now);

// Creación de una fecha específica LocalDate birthDate = LocalDate.of(1990, Month.MAY, 15); System.out.println("Fecha de nacimiento: " + birthDate);

// Trabajo con zonas horarias ZonedDateTime berlinTime = ZonedDateTime.now(ZoneId.of("Europe/Berlin")); ZonedDateTime tokyoTime = ZonedDateTime.now(ZoneId.of("Asia/Tokyo")); System.out.println("En Berlín: " + berlinTime); System.out.println("En Tokio: " + tokyoTime);

// Diferencia entre fechas long daysBetween = ChronoUnit.DAYS.between(birthDate, today); System.out.println("Días desde el cumpleaños: " + daysBetween);

// Formateo DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm"); String formatted = LocalDateTime.now().format(formatter); System.out.println("Formateado: " + formatted);

// Análisis de cadena LocalDate parsedDate = LocalDate.parse("2023-12-31"); System.out.println("Analizado: " + parsedDate); }}


2. Joda-Time — una alternativa probada en el tiempo



Antes del lanzamiento de Java 8, Joda-Time era el estándar de facto para trabajar con fechas. Ahora su uso está justificado solo en proyectos heredados o cuando se necesita soporte para versiones antiguas de Java (inferiores a 8).



Características principales:

  • Objetos inmutables — seguridad en hilos.
  • Soporte para múltiples sistemas de calendario (islámico, budista, etc.).
  • API simple e intuitiva.


Ejemplo de código con Joda-Time:

import org.joda.time.*;import org.joda.time.format.DateTimeFormat;import org.joda.time.format.DateTimeFormatter;

public class JodaTimeExample { public static void main(String[] args) { // Fecha y hora actuales DateTime now = DateTime.now(); System.out.println("Ahora: " + now);

// Creación de fecha DateTime specificDate = new DateTime(2020, 6, 15, 10, 30, 0); System.out.println("Fecha específica: " + specificDate);

// Suma de días DateTime nextW

Recommendations