java

Java y Calendar: sumar y restar fechas

En este post voy a explicar cómo operar con fechas usando un objeto de tipo Calendar en Java. Vamos a añadir y a substraer meses, años o días de la fecha, para saber la fecha pasada, futura, etcétera.

Java y Calendar – Operar con fechas, sumar y restar

Obtener objeto de tipo Calendar

Para obtener la fecha actual de un objeto Calendar llamamos a Calendar.getInstance. Así:

Calendar c = Calendar.getInstance();

Cuando tenemos a este objeto podemos agregarle y restarle días, meses, horas, etcétera.

¿Por qué no usar algoritmos propios?

La ventaja al usar los métodos que explico aquí es que no importa la fecha, siempre dará resultados correctos.

Por ejemplo, al restar un mes del 15 de enero del 2019 se convierte en 15 de diciembre del 2018 (o algo así, pero quiero que se note que se regresó un año atrás como debería hacerlo)

Con un algoritmo escrito por nosotros simplemente trataríamos de restar el mes, sin importar si fuera enero; provocando muchos errores.

Sumar y restar períodos de tiempo con Java y Calendar

Para sumar y restar, en ambos casos llamamos al método add de un Calendar. Este método recibe dos argumentos:

  • El campo con el que vamos a operar
  • La cantidad; si es positiva se suma, y si es negativa se resta

Este método modifica directamente al objeto; no devuelve uno nuevo.

Los campos más comunes son:

  • Calendar.MONTH: operar con meses
  • Calendar.YEAR: operar con años
  • Calendar.DAY_OF_YEAR: operar con días
  • Calendar.HOUR_OF_DAY: operar con horas
  • Calendar.MINUTE: operar con minutos
  • Calendar.SECOND: operar con segundos

También existen otros campos pero estos son los más comunes.

Ya lo dije y lo digo de nuevo: si se quiere restar se llama igualmente al método add pero pasándole un valor negativo.

Ejemplo de código: sumar y restar años, meses, días, horas, minutos y segundos

Veamos el siguiente código que hace múltiples operaciones con un objeto de tipo Calendar. Como dije, esto modifica directamente al objeto.

/*
Sumar y restar fechas con Java y Calendar
@author parzibyte
*/
import java.text.DateFormat;
import java.util.Calendar;
import java.util.Locale;

class Main {
 public static void main(String[] args) {
   Calendar c = Calendar.getInstance();

   System.out.println("Fecha original: " + formatearCalendar(c));
   // Restar cinco meses
   c.add(Calendar.MONTH, -5);
   System.out.println("-5 meses: " + formatearCalendar(c));
   // Sumar 2 años
   c.add(Calendar.YEAR, 2);
   System.out.println("+2 años: " + formatearCalendar(c));
   // Restar 2 días
   c.add(Calendar.DAY_OF_YEAR, -2);
   System.out.println("-2 días: " + formatearCalendar(c));
   // Sumar 52 días
   c.add(Calendar.DAY_OF_YEAR, 52);
   System.out.println("+52 días: " + formatearCalendar(c));
   // Sumar 24 horas
   c.add(Calendar.HOUR_OF_DAY, 24);
   System.out.println("+24 horas: " + formatearCalendar(c));
   // Sumar 1500 minutos (25 horas)
   c.add(Calendar.MINUTE, 1500);
   System.out.println("+1500 minutos: " + formatearCalendar(c));
   // Restar 90000 segundos (25 horas, 25 * 60 * 60)
   c.add(Calendar.SECOND, -90000);
   System.out.println("-90000 segundos: " + formatearCalendar(c));
 }

 // Este es un método para formatear e imprimir la fecha, pero no tiene nada
 // que ver con sumar o restar
 public static String formatearCalendar(Calendar c) {
   DateFormat df = DateFormat.getDateInstance(DateFormat.LONG, Locale.getDefault());
   return df.format(c.getTime());
 }
}

En el ejemplo se muestra cómo restar y sumar períodos de tiempo.

También he puesto una función para formatear la fecha y demostrar los resultados, la cual no afecta a las operaciones que hacemos, simplemente muestra la fecha.

Puedes ver más sobre Java o Fechas en mi blog.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.