Trabajo con fechas en Java: bibliotecas y herramientas
Trabajar con fechas y horas es una de las tareas clave en cualquier aplicación. En Java, durante mucho tiempo, las clases estándar java.util.Date y java.util.Calendar fueron criticadas por su incomodidad, mutabilidad y mal soporte de zonas horarias. Sin embargo, con la llegada de Java 8 la situación cambió radicalmente. En este artículo analizaremos las principales bibliotecas y herramientas para trabajar con fechas en Java, que te ayudarán a escribir código limpio y confiable.
1. Biblioteca estándar java.time (Java 8+)
A partir de Java 8, los desarrolladores tienen acceso al potente paquete java.time, basado en el estándar ISO-8601. Esta es la forma recomendada de trabajar con fechas y horas. Las clases principales son:
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 UTC (para tiempo de máquina).DurationyPeriod— para trabajar con intervalos.
Ejemplo: creación y formateo de fecha
import java.time.LocalDate;import java.time.format.DateTimeFormatter;
public class DateExample { public static void main(String[] args) { // Fecha actual LocalDate today = LocalDate.now(); System.out.println("Hoy: " + today);
// Creación de una fecha específica LocalDate birthDate = LocalDate.of(1990, 5, 15); System.out.println("Fecha de nacimiento: " + birthDate);
// Formateo DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); String formatted = birthDate.format(formatter); System.out.println("Fecha formateada: " + formatted);
// Análisis de cadena String dateStr = "2023-12-31"; LocalDate parsedDate = LocalDate.parse(dateStr); System.out.println("Analizada: " + parsedDate); }}Ejemplo: cálculo de diferencia entre fechas
import java.time.LocalDate;import java.time.Period;import java.time.temporal.ChronoUnit;
public class DateDifference { public static void main(String[] args) { LocalDate start = LocalDate.of(2020, 1, 1); LocalDate end = LocalDate.of(2024, 3, 15);
Period period = Period.between(start, end); System.out.println("Diferencia: " + period.getYears() + " años, " + period.getMonths() + " meses, " + period.getDays() + " días");
long daysBetween = ChronoUnit.DAYS.between(start, end); System.out.println("Total de días: " + daysBetween); }}2. Joda-Time (para versiones antiguas de Java)
Antes de la llegada de java.time, el estándar de facto era la biblioteca Joda-Time. Proporcionaba clases inmutables convenientes y soporte para zonas horarias. Si trabajas con Java 7 o inferior, Joda-Time es una excelente opción.
Inclusión (Maven):
<dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.12.7</version></dependency>Ejemplo: trabajo con Joda-Time
import org.joda.time.DateTime;import org.joda.time.Days;import org.joda.time.format.DateTimeFormat;import org.joda.time.format.DateTimeFormatter;
public class JodaExample { public static void main(String[] args) { // Fecha y hora actual DateTime now = new DateTime(); System.out.println("Ahora: " + now);
// Creación de fecha DateTime specificDate = También en la biblioteca
Generación de Swagger/OpenAPI para JavaScript (Node.js) — herramientas y bibliotecas
magic_enum para C++: guía completa con ejemplos prácticos
Guía completa de Armadillo para C++ con ejemplos prácticos
Trabajo con CSV en TypeScript: bibliotecas y ejemplos de código
Envío de SMS en Kotlin: Biblioteca API smslib4k