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).DurationyPeriod— 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
También en la biblioteca
Accompanist para Kotlin: guía completa con ejemplos prácticos
Trabajo con Excel en PHP: bibliotecas PhpSpreadsheet, PhpOffice y generación de XLSX
Trabajo con imágenes en Go: redimensionar y recortar con la librería imaging
Trabajo con Apache Kafka en Node.js: biblioteca KafkaJS
Envío de correo electrónico en Kotlin: bibliotecas y ejemplos de código