API java.time

Java
Java
Actualizado: 30/06/2025

¡Desbloquea el curso completo!

IA
Ejercicios
Certificado
Entrar

API java.time

La gestión del tiempo en aplicaciones Java ha experimentado una transformación significativa con la introducción de la API java.time en Java 8. Esta API moderna reemplaza las problemáticas clases Date y Calendar, ofreciendo un enfoque más intuitivo, seguro y funcional para trabajar con fechas, horas y períodos temporales.

Fundamentos de la nueva API temporal

La API java.time se basa en principios de inmutabilidad y claridad semántica. Todas las clases principales son inmutables, lo que significa que cualquier operación que modifique un objeto temporal devuelve una nueva instancia en lugar de alterar la original.

LocalDate fecha = LocalDate.of(2024, 3, 15);
LocalDate nuevaFecha = fecha.plusDays(10); // fecha original no cambia
System.out.println(fecha);      // 2024-03-15
System.out.println(nuevaFecha); // 2024-03-25

Esta característica elimina muchos errores comunes relacionados con la mutabilidad accidental y hace que el código sea más predecible y seguro en entornos concurrentes.

Clases principales para representación temporal

La API se organiza en torno a varias clases especializadas, cada una diseñada para casos de uso específicos:

LocalDate representa fechas sin información de hora ni zona horaria:

LocalDate hoy = LocalDate.now();
LocalDate cumpleanos = LocalDate.of(1990, Month.DECEMBER, 25);
LocalDate proximoLunes = LocalDate.now().with(TemporalAdjusters.next(DayOfWeek.MONDAY));

LocalTime maneja únicamente información horaria:

LocalTime ahora = LocalTime.now();
LocalTime reunion = LocalTime.of(14, 30, 0);
LocalTime mediaHoraAntes = reunion.minusMinutes(30);

LocalDateTime combina fecha y hora sin considerar zonas horarias:

LocalDateTime momento = LocalDateTime.now();
LocalDateTime evento = LocalDateTime.of(2024, 6, 15, 19, 30);
LocalDateTime inicioSemana = momento.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY))
                                   .withHour(0).withMinute(0).withSecond(0);

Trabajando con zonas horarias

Guarda tu progreso

Inicia sesión para no perder tu progreso y accede a miles de tutoriales, ejercicios prácticos y nuestro asistente de IA.

Progreso guardado
Asistente IA
Ejercicios
Iniciar sesión gratis

Más de 25.000 desarrolladores ya confían en CertiDevs

Para aplicaciones que requieren conciencia de zona horaria, la API proporciona ZonedDateTime y OffsetDateTime:

ZonedDateTime madridTime = ZonedDateTime.now(ZoneId.of("Europe/Madrid"));
ZonedDateTime tokyoTime = madridTime.withZoneSameInstant(ZoneId.of("Asia/Tokyo"));

// Crear una fecha específica en una zona horaria
ZonedDateTime conferencia = ZonedDateTime.of(
    LocalDateTime.of(2024, 9, 20, 10, 0),
    ZoneId.of("America/New_York")
);

La diferencia entre ZonedDateTime y OffsetDateTime radica en que el primero mantiene información completa sobre la zona horaria (incluyendo reglas de horario de verano), mientras que el segundo solo almacena el desplazamiento fijo respecto a UTC.

Medición y cálculo de períodos temporales

La API distingue entre dos conceptos fundamentales para medir tiempo:

Period representa cantidades de tiempo en términos de años, meses y días:

Period edad = Period.between(LocalDate.of(1990, 5, 15), LocalDate.now());
System.out.println("Edad: " + edad.getYears() + " años, " + 
                   edad.getMonths() + " meses, " + 
                   edad.getDays() + " días");

LocalDate vencimiento = LocalDate.now().plus(Period.ofMonths(6));

Duration mide tiempo en términos de segundos y nanosegundos, ideal para intervalos precisos:

LocalTime inicio = LocalTime.of(9, 0);
LocalTime fin = LocalTime.of(17, 30);
Duration jornada = Duration.between(inicio, fin);

System.out.println("Horas trabajadas: " + jornada.toHours());
System.out.println("Minutos totales: " + jornada.toMinutes());

Formateo y parsing de fechas

La clase DateTimeFormatter proporciona capacidades avanzadas de formateo y análisis:

LocalDateTime momento = LocalDateTime.now();

// Formateo con patrones predefinidos
String iso = momento.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
String basico = momento.format(DateTimeFormatter.BASIC_ISO_DATE);

// Formateo personalizado
DateTimeFormatter formato = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm");
String personalizado = momento.format(formato);

// Parsing desde string
LocalDate fechaParseada = LocalDate.parse("2024-12-25", DateTimeFormatter.ISO_LOCAL_DATE);
LocalDateTime momentoParseado = LocalDateTime.parse("15/03/2024 14:30", formato);

Operaciones avanzadas con TemporalAdjusters

Los TemporalAdjusters permiten realizar cálculos temporales complejos de manera elegante:

LocalDate hoy = LocalDate.now();

// Ajustadores predefinidos
LocalDate primerDiaMes = hoy.with(TemporalAdjusters.firstDayOfMonth());
LocalDate ultimoViernes = hoy.with(TemporalAdjusters.lastInMonth(DayOfWeek.FRIDAY));
LocalDate proximoAnio = hoy.with(TemporalAdjusters.firstDayOfNextYear());

// Ajustador personalizado para el próximo día laborable
TemporalAdjuster proximoDiaLaborable = temporal -> {
    LocalDate fecha = LocalDate.from(temporal);
    DayOfWeek dia = fecha.getDayOfWeek();
    
    if (dia == DayOfWeek.FRIDAY) {
        return fecha.plusDays(3); // Lunes
    } else if (dia == DayOfWeek.SATURDAY) {
        return fecha.plusDays(2); // Lunes
    } else {
        return fecha.plusDays(1); // Día siguiente
    }
};

LocalDate siguienteLaborable = hoy.with(proximoDiaLaborable);

La API java.time representa un salto cualitativo en el manejo temporal en Java, proporcionando herramientas robustas y expresivas que simplifican tareas complejas mientras mantienen la precisión y seguridad necesarias para aplicaciones profesionales.

Completa Java y certifícate

Únete a nuestra plataforma y accede a miles de tutoriales, ejercicios prácticos, proyectos reales y nuestro asistente de IA personalizado para acelerar tu aprendizaje.

Asistente IA

Resuelve dudas al instante

Ejercicios

Practica con proyectos reales

Certificados

Valida tus conocimientos

Más de 25.000 desarrolladores ya se han certificado con CertiDevs

⭐⭐⭐⭐⭐
4.9/5 valoración