Como no podía ser menos, el primer artículo tenía que estar relacionado con el lenguaje de programación Java.
El manejo de fechas en Java puede resultar en un principio un poco menos intuitivo que en otros lenguajes tales como PHP o Visual Basic. Sin embargo, para trabajar con fechas de una forma más cómoda, contamos con la clase java.util.Calendar.
Calendar es una clase base abstracta con la que podremos representar y manejar fechas (objetos de tipo Date), así como modificar y obtener sus datos enteros tales como YEAR, MONTH, DAY, etc…
Para instanciar un objeto de clase Calendar, tendremos 2 opciones:
- Opción A: Utilizar el método getInstance(), que nos proporcionará un objeto Calendar cuyos campos han sido inicializados con la fecha y la hora actuales.
- Opción B: Utilizar el constructor de la clase GregorianCalendar. Esta clase es a su vez una subclase de java.util.Calendar, que nos proporciona un calendario estándar usado comunmente en la mayor parte del mundo.
A continuación mostramos el código de las 2 opciones mencionadas:
Date date = new Date();
Calendar calendar1 = Calendar.getInstance();
Calendar calendar2 = new GregorianCalendar();
Una vez instanciado el objeto Calendar, ya podemos manejar las fechas a nuestro antojo.
¿Cómo extraer los datos individuales de la fecha?
¿A que os suenan los famosos getters y setters…? pues esta clase no iba a ser menos.
La clase java.util.Calendar nos proporciona un único método get(int field) para extraer cualquier atributo del calendario que indiquemos en el atributo field, tal y como veremos a continuación en el siguiente código de ejemplo.
NOTA: Ten en cuenta que valores como el mes o el día de la semana comienzan por 0, no por 1.
// Instanciamos el objeto Calendar
Calendar calendar = Calendar.getInstance();
// Obtenemos el valor del año, mes y día.
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int date = calendar.get(Calendar.DATE);
System.out.println("AÑO ACTUAL: " + year);
System.out.println("MES ACTUAL: " + month);
System.out.println("DÍA ACTUAL: " + date);
¿Cómo modificar los atributos o valores de la fecha?
Al igual que disponemos del método get(int field) para obtener cualquier valor de una fecha, disponemos también del método set(int field, int value) para modificarlo.
Deberemos pasar 2 parámetros:
- field: atributo de la fecha que queremos modificar
- value: nuevo valor a asignar
Veamos a continuación un ejemplo de cómo modificar los atributos año, mes y día:
calendar.set(Calendar.YEAR, 2020);
calendar.set(Calendar.MONTH, 02); // OJO: Recueda que los valores de los meses comienzan por 0.
calendar.set(Calendar.DATE, 30);
Además del método simple set(int field, int value), disponemos también de 3 métodos más sobrecargados set que nos permitirán asignar fechas completas en un único paso:
// Asignamos año, mes y día.
calendar.set(2020, 02, 30);
// Asignamos año, mes, día, horas y minutos.
calendar.set(2020, 02, 30, 19, 00);
// Asignamos año, mes, día, horas, minutos y segundos.
calendar.set(2020, 02, 30, 19, 00, 55);
¿Cómo sumar y restar fechas?
He aquí uno de los métodos más útiles cuando queremos operar con fechas: add(int field, int amount).
Con la misma estructura que el método set(int field, int amount), podremos sumar (y por lo tanto restar) cantidades de diferentes valores a una fecha.
- field: atributo de la fecha que queremos modificar y cuya cantidad pasaremos en el parámetro amount
- amount: cantidad a sumar o restar (valores negativos) a la fecha
Viajemos en el tiempo y rejuvenezcamos 10 años:
// Sumamos 30 minutos a la fecha actual.
calendar.add(Calendar.MINUTE, 30);
// Sumamos 100 días a la fecha actual.
calendar.add(Calendar.DATE, 100);
// Restamos 10 años a la fecha actual.
calendar.add(Calendar.YEAR, -10);
Para más información sobre la clase Calendar podéis acceder también a la documentación de Sun (o de Oracle, como más os guste).
Espero que el artículo os haya sido de utilidad. Como habéis comprobado, la clase Calendar nos facilita la vida cuando queremos manejar fechas en java, y es muy fácil e intuitiva de utilizar. En próximas entregas, veremos cómo realizar más operaciones con fechas.