Trabajo con fechas en Java: revisión de bibliotecas y herramientas

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: revisión de bibliotecas y herramientas



Trabajar con fechas y horas es una de las tareas más frecuentes en el desarrollo con Java. Durante mucho tiempo, las clases estándar java.util.Date y java.util.Calendar generaron muchas críticas debido a su falta de intuición, mutabilidad y problemas con la seguridad en hilos. Sin embargo, con el lanzamiento de Java 8 la situación cambió radicalmente. En esta revisión, analizaremos las principales bibliotecas para trabajar con fechas en Java, sus puntos fuertes y ejemplos de uso.



1. java.time (JSR-310) — API estándar



A partir de Java 8, el paquete java.time es la herramienta principal para trabajar con fechas y horas. Fue desarrollado bajo la dirección de Stephen Colebourne, autor de Joda-Time, e incorpora las mejores prácticas.



Clases clave:

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


Ejemplo de uso:



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

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

// Crear una fecha específica LocalDate specificDate = LocalDate.of(2025, Month.MARCH, 15); System.out.println("Fecha específica: " + specificDate);

// Trabajar con hora LocalTime now = LocalTime.now(); LocalTime meetingTime = LocalTime.of(14, 30); System.out.println("Hora de la reunión: " + meetingTime);

// Formateo DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm"); LocalDateTime event = LocalDateTime.of(2025, 12, 31, 23, 59); String formatted = event.format(formatter); System.out.println("Formateado: " + formatted);

// Diferencia entre fechas Period period = Period.between(today, specificDate); System.out.println("Días hasta el 15 de marzo: " + period.getDays()); }}


Ventajas: integrado en JDK, seguro para hilos, objetos inmutables, API rica, soporte para todas las zonas horarias.



2. Joda-Time



Antes de la aparición de java.time, Joda-Time era el estándar de facto para trabajar con fechas en Java. Hoy en día, su uso solo se justifica en proyectos antiguos (anteriores a Java 8), ya que los desarrolladores recomiendan migrar a java.time.



Ejemplo:



import org.joda.time.DateTime;import org.joda.time.Days;import org.joda.time.LocalDate;

public class JodaTimeExample { public static void main(String[] args) { // Fecha actual LocalDate today = LocalDate.now(); DateTime now = DateTime.now();

// Diferencia entre fechas LocalDate start = new LocalDate(2025, 1, 1); LocalDate end = new LocalDate(2025, 12, 31); int days = Days.daysBetween(start, end).getDays(); System.out.println("Días entre: " + days); }}


Desventajas: requiere dependencia externa, no se actualiza activamente, es inferior a java.time en funcionalidad.



3. Apache Commons Lang 3



La biblioteca org.apache.commons.lang3.time proporciona utilidades convenientes para trabajar con fechas, especialmente para formateo, análisis y cálculos.



Clases populares:

  • DateUtils — métodos para

Recommendations