java

Sumar y restar fechas en Java

Introducción

Ya vimos cómo sumar y restar fechas con JavaScript sin importar si eran años, meses o días, pues convertíamos todo a milisegundos.

Hoy toca el turno de Java, que no tiene nada que ver con JavaScript por cierto.

Veamos entonces cómo sumar y restar fechas en Java con las API’s recientes.

Sumar y restar fechas en Java

Sabremos cómo sumar y restar lo siguiente:

  • Años
  • Meses
  • Semanas
  • Días
  • Horas
  • Minutos
  • Segundos
  • Nanosegundos

Vamos allá.

Sumar y restar fechas con Java

Vamos a ver múltiples ejemplos que supongo son los más comunes. También veremos cómo operar con nanosegundos, aunque casi no es necesario pues la API proporciona todo.

Sobre los formatos

Lo que haremos para operar con fechas en Java será convertir una cadena representada por una fecha a un objeto de tipo LocalDateTime (si sólo quieres operar fechas sin horas, usa el objeto LocalDate)

Para que quede claro esto, si únicamente trabajas con fechas (no horas ni segundos ni minutos) usa LocalDate, y si quieres trabajar con medidas más pequeñas usa LocalDateTime. Los métodos que veremos son compatibles con ambas clases, o al menos la mayoría.

Cosas que importar

Si decides trabajar con LocalDateTime importa java.time.LocalDateTime, y si prefieres a LocalDate importa java.time.LocalDate.

Para el formateador (que nos permitirá convertir cadenas a fechas y viceversa) importa a java.time.format.DateTimeFormatter

De manera que a primera vista nuestros imports pueden lucir así:

import java.time.LocalDateTime; // O también LocalDate
import java.time.format.DateTimeFormatter;

Ahora sí vamos al código

Sumar años con Java y LocalDateTime

He hecho una función estática, puedes quitarle el static si la pones en otra clase que no sea Main. El punto es que es la siguiente:

public static String sumarAnios(String fechaYHora, long anios) {
    // Crear un formateador como 2018-10-16 15:00:00
    DateTimeFormatter formateador = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");

    // Lo convertimos a objeto para poder trabajar con él
    LocalDateTime fechaYHoraLocal = LocalDateTime.parse(fechaYHora, formateador);

    // Sumar los años indicados
    fechaYHoraLocal = fechaYHoraLocal.plusYears(anios);

    //Formatear de nuevo y regresar como cadena
    return fechaYHoraLocal.format(formateador);
}

Recibe una cadena como “2018-10-16 20:15:22” y devuelve una cadena en el mismo formato pero con los años sumados. Su uso puede ser así:

String fechaParaOperar = "2018-10-16 00:00:00";
String dentroDeDiezAnios = sumarAnios(fechaParaOperar, 10);
System.out.println("Dentro de diez años: " + dentroDeDiezAnios);

Sumar años con Java y LocalDate

Sólo pondré este ejemplo con los años, para ver cómo funcionan ambas cosas. La función queda así:

public static String sumarAnios(String fechaYHora, long anios) {
        // Crear un formateador como 2018-10-16
        DateTimeFormatter formateador = DateTimeFormatter.ofPattern("uuuu-MM-dd");

        // Lo convertimos a objeto para poder trabajar con él
        LocalDate fechaLocal = LocalDate.parse(fechaYHora, formateador);

        // Sumar los años indicados
        fechaLocal = fechaLocal.plusYears(anios);

        //Formatear de nuevo y regresar como cadena
        return fechaLocal.format(formateador);
    }

Lo que cambia es el formateador y el objeto, que ahora será de tipo LocalDate. Por cierto, ahora recibe una cadena de forma “2018-10-16”; es decir, sin hora.

Ahora sí vamos a ver más funciones. Recuerda que puedes cambiarlas según el código mostrado arriba.

Restar años con Java

public static String restarAnios(String fechaYHora, long anios) {
    // Crear un formateador como 2018-10-16 15:00:00
    DateTimeFormatter formateador = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");

    // Lo convertimos a objeto para poder trabajar con él
    LocalDateTime fechaYHoraLocal = LocalDateTime.parse(fechaYHora, formateador);

    // Restar los años indicados
    fechaYHoraLocal = fechaYHoraLocal.minusYears(anios);

    //Formatear de nuevo y regresar como cadena
    return fechaYHoraLocal.format(formateador);
}

Exactamente lo mismo que la otra función pero ahora llamamos a minusYears en lugar de plusYears.

Operar con meses, semanas, días, horas, minutos, segundos y nanosegundos

Con los ejemplos de arriba podemos darnos cuenta de que lo único que cambia es el método que llamamos.

Aquí una lista de métodos que soportan ambas clases:

  • minusYears y plusYears: sumar y restar años
  • Para los meses se usan minusMonths y plusMonths
  • En caso de querer sumar o restar días usa minusDays y plusDays para días
  • Si queremos trabajar con semanas de 7 días usamos a plusWeeks y minusWeeks

Por otro lado, como LocalDateTime es más preciso, soporta más métodos. Son los siguientes:

  • En el caso de trabajar con horas, tenemos a plusHours y minusHours
  • Claramente podemos sumar y restar minutos con plusMinutes y minusMinutes
  • Si queremos trabajar con segundos usamos plusSeconds y minusSeconds
  • Y el último método, el más preciso, es el de plusNanos y minusNanos, que opera con nanosegundos.

Conclusión

Digan lo que digan, preferiré a JavaScript. Tal vez no tiene tantos métodos como Java, pero vamos, con JavaScript no tengo que adivinar qué cosas importar, preocuparme por funciones estáticas, clases, ni nada de eso.

En fin, este post no pretendía comparar, sólo daba mi punto de vista, además de que Java es un buen lenguaje.

Finalmente aquí dejo algunas referencias a las clases usadas:

LocalDate

LocalDateTime

DateTimeFormatter

 

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/

Ver comentarios

Entradas recientes

Servidor HTTP en Android con Flutter

El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…

4 días hace

Imprimir automáticamente todos los PDF de una carpeta

En este post te voy a enseñar a designar una carpeta para imprimir todos los…

5 días hace

Guía para imprimir en plugin versión 1 desde Android

En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…

1 semana hace

Añadir tasa de cambio en sistema de información

Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…

2 semanas hace

Comprobar validez de licencia de plugin ESC POS

Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…

2 semanas hace

Imprimir euro € en impresora térmica

Hoy voy a enseñarte cómo imprimir el € en una impresora térmica. Vamos a ver…

4 semanas hace

Esta web usa cookies.