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)

lunes, 4 de mayo de 2015

¿Cómo calcular los meses entre dos fechas en Java?

Problema

Muchos de nosotros alguna vez nos hemos encontrado con el problema de calcular la diferencia en meses entre dos fechas en el lenguaje Java, la tarea al principio parece fácil, pero al analizar detalladamente nos encontramos con una serie de validaciones e interpretaciones que hacen difícil el programar el algoritmo. 

Como es conocido para muchos desarrolladores Java, el trabajar con fechas (Date) es algo muy tedioso, y tareas que al principio parecen fáciles de realizar, terminan convirtiéndose en un suplicio...

Solución

Para calcular la diferencia en meses entre dos fechas en Java lo primero que debemos hacer es asegurarnos de dar formato ("dd/MM/yyyy") a las fechas con las que trabajaremos, esto debido a que no es lo mismo tener "04/05/2015" a "04/05/2015 11:13:25"; evidentemente en Java la primera fecha es "menor" que la segunda, pese a ser el mismo día, mes y año.

Otro aspecto muy importante a considerar y aunque pareciera evidente, es que la fecha de finalización debe ser mayor que la fecha de inicio para calcular la diferencia en meses entre las dos fechas.

Lo siguiente a tomar en cuenta es que un mes cumplido es cuando el día de la fecha de finalización es mayor o igual al día de la fecha inicio de comparación. Por ejemplo:
Fecha inicio: 04/05/2015
Fecha finalización: 04/07/2015
Como nos podemos dar cuenta del 04 de mayo del 2015 al 04 de julio del 2015 han pasado dos meses; pero si la Fecha de finalización para el cálculo de meses entre las dos fechas es 03/07/2015, los meses cumplidos únicamente sería uno; así también, si la fecha de finalización sería 03/08/2015, los meses entre las dos fechas seguirían siendo dos.

Implementación

Luego de haber analizado los problemas para calcular la diferencia en meses entre dos fechas en Java, aquí dejo el código fuente de la implementación del algoritmo en lenguaje Java.



Espero sea de utilidad y solucione su problema.

6 comentarios:

  1. muchas gracias, me sirvio de apoyo.

    ResponderEliminar
  2. hola, felicitaciones por tu excelente tutorial. Tengo problemas con la resta de horas en jsf. La idea es realizar una resta entre horas en JSF. ¿Qué tipo de datos se debe utilizar? En que parte debo cambiar el tipo de dato, a horas?, o debo utilizar algún convertidor. Debo tener 2 campos horaInicial y HoraFinal y se debe realizar el calculo en otro tercer campo donde me guarde la resta. Cualquier consejo o ayuda te agradeceria muuuchiiisimo, jeje. Chau.
    lauritamon93@gmail.com

    ResponderEliminar
  3. hola, felicitaciones por tu excelente tutorial. Tengo problemas con la resta de horas en jsf. La idea es realizar una resta entre horas en JSF. ¿Qué tipo de datos se debe utilizar? En que parte debo cambiar el tipo de dato, a horas?, o debo utilizar algún convertidor. Debo tener 2 campos horaInicial y HoraFinal y se debe realizar el calculo en otro tercer campo donde me guarde la resta. Cualquier consejo o ayuda te agradeceria muuuchiiisimo, jeje. Chau.
    lauritamon93@gmail.com

    ResponderEliminar
    Respuestas
    1. Hola estimada Laura, muchas gracias por tu comentario, te comento q he pasado por el mismo problema que tienes para la cuestión de restar o sumar fechas; en este momento estoy viajando pero apenas llegue a mi domicilio, voy a escribir sobre ese problema en particular. Un abrazo inmenso desde Ecuador.

      Eliminar
    2. Es sencillo ocupas el mismo algoritmo, generalmente depende si estas usando algun framework para visualización de ahi los tipos de dato son date que los puedes transformar en lo que desees,

      Eliminar
  4. Muchas gracias por el aporte!!. Muy útil.

    ResponderEliminar

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