Este es el comienzo para mi blog

Mi día a día en el desarrolo de Software (JEE, Glassfish, JBoss EAP, Primefaces, Ajax, Android)

viernes, 22 de abril de 2016

¿Cómo sumar/restar días, meses o años a una fecha en Java?

Problema

En nuestro trabajo del día a día seguramente que alguna vez nos hemos encontrado con el problema de sumar o restar un determinado número de meses a una fecha en el lenguaje Java, esto especialmente en el desarrollo de Sistemas de Información en los cuales el registro de fechas son un tema delicado de tratar. 

Como hable en mi anterior post (¿Cómo calcular los meses entre dos fechas en Java?) es conocido para muchos desarrolladores Java que el trabajar con fechas (Date) es algo complicado.

Solución

Para sumar/restar un determinado número de meses a una fecha en Java haremos uso de la clase Calendar de Java, la cual nos ayudará a realizar la suma/resta de meses a nuestra fecha con solo incluir unas pocas líneas de código.

La clase Calendar representa una fecha exacta en el tiempo, pero su principal característica es que esta sea mutable, es decir, permitir cambiar su valor sin generar un nuevo objeto (cosa que no permite Date). Para instanciar un objeto de tipo Calendar lo hacemos con su método getInstance(), el cual nos crea un objeto de la clase conteniendo la fecha de ese momento. Así es muy típico el uso: Calendar ahoramismo = Calendar.getInstance(). Del mismo modo, la clase Calendar nos permite modificar la fecha con la que es instanciada, para esto únicamente hacemos uso del metodo setTime(), su uso es el siguiente: ahoramismo.setTime(fechadeayer), donde fechadeayer debe estrictamente ser de tipo Date y representa la fecha que queremos que se almacene en nuestro objeto. Ahora bien para finalizar la suma/resta de un determinado número de meses a una fecha en Java, debemos conocer que la clase Calendar posee un  método que permite añadir (add) un determinado número de días (DAY_OF_MONTH), meses (MONTH) o años (YEAR) a nuestra fecha, esto se lo hace con la ayuda del método add; debiendole indicar al método, en sus argumentos, si deseamos que se lo haga a nivel de días, meses o años; y cuál es el número determinado que deseamos que se sume (el número debe estar en positivo ej. 3) o se reste (el número debería estar en negativo ej. -7).

Implementación

Luego de haber analizado los problemas para sumar/restar meses a una fecha en Java, pongo a disposición el código fuente  en lenguaje Java.

public static Calendar aniadirDias(Date fecha, int diasParaAniadir) {
        try {
            Calendar c1 = Calendar.getInstance();
            c1.setTime(fecha);
            System.out.println("--> " + c1.getTime());
            c1.add(Calendar.DAY_OF_MONTH, diasParaAniadir);
            System.out.println("--> + " + c1.getTime());
            return c1;
        } catch (Exception e) {
            return null;
        }
    }


Espero les haya ahorrado horas de investigación y de dolores de cabeza.
No olviden comentar el artículo.

4 comentarios:

  1. que pasa si le sumas un dia a la fecha 31-07-2017? o restas un día a 01-07-2017?

    ResponderEliminar
  2. perfecto copiando tal cual tu código funciona excelente. gracias.

    ResponderEliminar
  3. no me funciona.
    como dice David , si sumas un dia al 31-07-2017 te sale 1-07-2017 no hace el cambio de mes

    ResponderEliminar

Gracias por dejar su comentario. Lo esperamos en el siguiente post.