Trabajo con fechas y horas en Java: de la A a la Z para principiantes

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

Introducción al trabajo con fechas y horas en Java



Trabajar con fechas y horas es una de las tareas clave en el desarrollo de cualquier aplicación. Ya sea para registro de eventos, cálculo de plazos de entrega, trabajo con horarios o análisis de datos — no se puede prescindir de entender cómo Java gestiona los objetos temporales. En este artículo, analizaremos todos los aspectos principales: desde la API antigua (Date y Calendar) hasta el paquete moderno java.time (Java 8+). Aprenderás a crear, formatear, comparar y calcular la diferencia entre fechas.



1. API antigua: Date y Calendar



Antes de Java 8, las clases principales para trabajar con fechas eran java.util.Date y java.util.Calendar. Todavía se encuentran en código heredado, por lo que es importante entender sus capacidades básicas y limitaciones.



1.1 Clase Date

Date representa un momento específico en el tiempo con precisión de milisegundos. Sin embargo, tiene muchas desventajas: es mutable (inseguro en aplicaciones multiproceso) y tiene poco soporte para internacionalización.



import java.util.Date;

public class DateExample { public static void main(String[] args) { // Fecha y hora actuales Date now = new Date(); System.out.println("Fecha actual: " + now);

// Forma obsoleta de obtener el año (1900 + ...) int year = now.getYear() + 1900; System.out.println("Año: " + year); }}


1.2 Clase Calendar

Calendar es una clase más flexible pero engorrosa. Permite manipular componentes individuales de la fecha (año, mes, día).



import java.util.Calendar;

public class CalendarExample { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); System.out.println("Hora actual: " + cal.getTime());

// Establecer una fecha específica cal.set(2025, Calendar.MARCH, 15); System.out.println("Fecha establecida: " + cal.getTime());

// Añadir 7 días cal.add(Calendar.DAY_OF_MONTH, 7); System.out.println("En una semana: " + cal.getTime()); }}


Desventajas: numeración de meses desde 0 (enero = 0), mutabilidad, falta de formateo simple.



2. Nueva API: java.time (Java 8+)



A partir de Java 8, se añadió a la biblioteca estándar el paquete java.time, basado en las ideas de la biblioteca Joda-Time. Está compuesto por clases inmutables, lo que hace que el código sea seguro y predecible.



2.1 LocalDate — solo fecha

LocalDate representa una fecha sin hora (año, mes, día). Ideal para cumpleaños, calendarios.



import java.time.LocalDate;import java.time.Month;

public class LocalDateExample { public static void main(String[] args) { // Fecha actual LocalDate today = LocalDate.now(); System.out.println("Hoy: " + today);

// Fecha específica LocalDate specificDate = LocalDate.of(2025, Month.DECEMBER, 31); System.out.println("Año nuevo: " + specificDate);

// Sumar/restar días LocalDate nextWeek = today.plusDays(7); System.out.println("En una semana: " + nextWeek); }}


2.2 LocalTime — solo hora

LocalTime almacena la hora (horas, minutos, segundos, nanosegundos) sin vincularla a una fecha.



import java.time.LocalTime;

public class LocalTimeExample { public static void main(String[] args) { LocalTime now = LocalTime.now(); System.out.println("Hora actual: " + now);

LocalTime meeting = LocalTime.of(14, 30); System.out.println("Reunión a las: " + meeting);

// Comparación de horas if (now.isAfter(meeting)) { System.out.println("La reunión ya pasó"); } }}<

Blogs

Book Recommendations