Quiero contarte lo que hice cuando me tocó desarrollar una aplicación para organizar eventos. Por supuesto, lo más difícil de hacer era gestionar fechas y horas de forma precisa, pero con java.util.Calendar fue muy sencillo de lograr. Gracias a ella pude ajustar los días, sumar meses y cambiar la zona horaria sin tener inconvenientes. Así que, voy a contarte qué es y cómo usar esta clase para configurar fechas específicas, calcular intervalos y trabajar con zonas horarias.
¿Qué es java.util.Calendar?
java.util.Calendar es una clase abstracta de Java con la que puedes manipular fechas y horas en términos de campos del calendario, como el año, mes, día, hora, minuto, segundo, etc. Como es abstracta, no puedes instanciarla directamente, pero puedes obtener una instancia mediante el método estático Calendar.getInstance().
Características
- Basada en campos del calendario: Trabaja con valores como YEAR, MONTH, DAY_OF_MONTH, entre otros.
- Hereda de la clase Object y es compatible con interfaces como Serializable y Cloneable.
- Compatibilidad global: Soporta zonas horarias y configuraciones locales.
Cómo crear una instancia de Calendar
Quiero mostrarte que, perfectamente ppuedes obtener una instancia de Calendar utilizando Calendar.getInstance():
import java.util.Calendar;
public class EjemploCalendar {
public static void main(String[] args) {
Calendar calendario = Calendar.getInstance();
System.out.println("Año actual: " + calendario.get(Calendar.YEAR));
System.out.println("Mes actual: " + (calendario.get(Calendar.MONTH) + 1)); // Enero = 0
System.out.println("Día actual: " + calendario.get(Calendar.DAY_OF_MONTH));
}
}
Resultado:
Año actual: 2024
Mes actual: 12
Día actual: 27
Métodos principales de java.util.Calendar
Lo bueno es que, la clase Calendar te ofrece varios métodos para trabajar con fechas y horas. Voy a mostrarte los más útiles con ejemplos prácticos:
add(int field, int amount)
Este método permite sumar o restar un valor a un campo del calendario, como días, meses o años.
calendario.add(Calendar.DAY_OF_MONTH, -7); // Resta 7 días
System.out.println("Hace una semana: " + calendario.getTime());
calendario.add(Calendar.MONTH, 1); // Suma 1 mes
System.out.println("El próximo mes: " + calendario.getTime());
Resultado:
Hace una semana: Vie Dic 20 00:00:00 CET 2024
El próximo mes: Lun Ene 27 00:00:00 CET 2025
get(int field)
Este método devuelve el valor de un campo específico, como el día de la semana o la hora actual.
int diaSemana = calendario.get(Calendar.DAY_OF_WEEK);
System.out.println("Día de la semana: " + diaSemana); // Domingo = 1
Resultado:
Día de la semana: 5
getMaximum(int field) y getMinimum(int field)
Devuelven el valor máximo y mínimo de un campo, como el número de días en un mes.
int maxDiasMes = calendario.getMaximum(Calendar.DAY_OF_MONTH);
System.out.println("Días máximos en un mes: " + maxDiasMes);
int minDiasSemana = calendario.getMinimum(Calendar.DAY_OF_WEEK);
System.out.println("Día mínimo de la semana: " + minDiasSemana);
Resultado:
Días máximos en un mes: 31
Día mínimo de la semana: 1
set(int field, int value)
Con este método puedes establecer un valor específico para un campo del calendario.
calendario.set(Calendar.YEAR, 2025);
calendario.set(Calendar.MONTH, Calendar.JUNE); // Mes de junio
calendario.set(Calendar.DAY_OF_MONTH, 15);
System.out.println("Fecha configurada: " + calendario.getTime());
Resultado:
Fecha configurada: Dom Jun 15 00:00:00 CET 2025
getTime()
Este te devuelve un objeto Date que representa el valor actual del calendario.
Date fecha = calendario.getTime();
System.out.println("Fecha como objeto Date: " + fecha);
Resultado:
Fecha como objeto Date: Lun Dic 27 00:00:00 CET 2024
roll(int field, int amount)
Modifica un campo sin afectar otros campos relacionados.
calendario.roll(Calendar.DAY_OF_MONTH, 10); // Suma 10 días sin cambiar el mes
System.out.println("Fecha tras roll: " + calendario.getTime());
Resultado:
Fecha tras roll: Jue Ene 06 00:00:00 CET 2025
Zonas horarias y configuraciones locales
Lo grandioso de java.util.Calendar es que te deja trabajar con diferentes zonas horarias y configuraciones locales. Te servirá bastante para aplicaciones globales.
Cambiar la zona horaria
calendario.setTimeZone(TimeZone.getTimeZone("America/New_York"));
System.out.println("Hora en Nueva York: " + calendario.getTime());
Resultado:
Hora en Nueva York: Lun Dic 26 18:00:00 EST 2024
Crear un Calendar con configuración local
Calendar calendarioEspanol = Calendar.getInstance(new Locale("es", "ES"));
System.out.println("Fecha en español: " + calendarioEspanol.getTime());
Resultado:
Fecha en español: Lun Dic 27 00:00:00 CET 2024
¿Cuándo deberías usar java.util.Calendar?
Aunque java.util.Calendar ha sido reemplazada en gran medida por las clases de la API moderna de Java (java.time), sigue siendo útil en proyectos heredados y cuando trabajas con bibliotecas que aún la utilizan. Entender cómo funciona es fundamental para trabajar con código legado y mejorar tus habilidades de programación.
Que bueno que ya sabes usar java.util.Calendar para gestionar fechas y horas en Java. Recuerda usar sus métodos, los que te expliqué aquí, para realizar operaciones comunes de forma sencilla. No te desanimes solo porque tiene limitaciones en comparación con las APIs modernas, ya que sigue siendo una pieza importante en el ecosistema de Java.
Apúntate al Bootcamp de Java Full Stack de KeepCoding y lleva tus habilidades al siguiente nivel. Aprende desde conceptos básicos hasta tecnologías avanzadas, y prepárate para transformar tu futuro profesional en tiempo récord. ¡Tu oportunidad comienza hoy!