Trabajo con fechas en Java: java.time y Joda-Time

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

¿Qué es y para qué sirve?

Trabajar con fechas y horas es una de las tareas más comunes en la programación en Java. La biblioteca estándar java.time (introducida en Java 8) proporciona una API potente e intuitiva para manejar fechas, horas, zonas horarias y períodos. Antes de Java 8, los desarrolladores solían usar la biblioteca de terceros Joda-Time, que fue el prototipo de java.time. Ambas bibliotecas resuelven los problemas de las antiguas java.util.Date y java.util.Calendar: seguridad en hilos, inmutabilidad de objetos y métodos convenientes para formateo.

¿Cómo instalar?

java.time está integrado en Java 8 y versiones posteriores — no requiere instalación. Para Joda-Time, agregue la dependencia en Maven:

<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.12.5</version>
</dependency>

Para Gradle: implementation 'joda-time:joda-time:2.12.5'.

Funciones principales

  • LocalDate, LocalTime, LocalDateTime — trabajo con fecha/hora sin zona horaria.
  • ZonedDateTime, OffsetDateTime — consideración de husos horarios.
  • Period, Duration — diferencia entre fechas y horas.
  • DateTimeFormatter — formateo y análisis flexibles.
  • Instant — momento en el tiempo en UTC.

Ejemplo de código en Java

import java.time.*;
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 specificDate = LocalDate.of(2025, Month.MARCH, 15);
System.out.println("Fecha específica: " + specificDate);

// Diferencia entre fechas
Period period = Period.between(specificDate, today);
System.out.println("Diferencia: " + period.getYears() + " años, " + period.getMonths() + " meses, " + period.getDays() + " días");

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

// Análisis de cadena
LocalDate parsed = LocalDate.parse("01.01.2024", formatter);
System.out.println("Analizado: " + parsed);

// Trabajo con hora y zonas
ZonedDateTime zoned = ZonedDateTime.now(ZoneId.of("Europe/Moscow"));
System.out.println("Hora de Moscú: " + zoned);
}
}

Cuándo usar

java.time es la opción principal para todos los proyectos nuevos en Java 8+. Úselo para: cálculo de edad, plazos, registros con marcas de tiempo, planificadores de tareas, trabajo con calendarios y zonas horarias. Joda-Time es útil para mantener proyectos antiguos o si se necesitan funciones adicionales, como Interval o MutableDateTime. Ambas bibliotecas simplifican significativamente el código en comparación con el obsoleto Calendar.

Recommendations