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).DurationyPeriod— 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 También en la biblioteca
Lottie para Swift: guía completa con ejemplos
Generación de PDF en TypeScript: revisión de bibliotecas y herramientas
Migraciones de bases de datos en C# (.NET): Entity Framework, FluentMigrator y otros enfoques
csv — Trabajo con archivos CSV en Rust
Cliente Redis para C# (.NET): StackExchange.Redis