Como obtener la diferencia de años entre dos fechas Date en Java

Hola a todos, hoy os voy a explicar como podemos obtener la diferencia de años entre 2 objetos Date en Java.

Es posible que en algún momento necesites calcular la diferencia entre 2 objetos Date, tenemos varias formas de hacerlo.

Sino sabéis como funciona la clase Date, aquí os dejo un pequeño tutorial:

Clase Date de Java

Una cosa a tener en cuenta, es que cuando dos años tienen meses diferentes según el mes restaremos un año o no. Por ejemplo, sí tenemos estas dos fechas: 15/07/2017 y 30/03/2021, la diferencia de años es de 3 años, ya que no llega a 4 años realmente.

En los siguientes ejemplos, vamos a tener como referencia que el día de hoy es 02/12/2021, ya que según el día ejecutado puede cambiar el resultado.

  • Pasando 3 parámetros numéricos (dia, mes, año): calculamos la diferencia de años entre un día concreto y la fecha de hoy. Veamos un ejemplo aplicado:
import java.util.Date;

public class EjemploDiferenciaAnios {

    public static void main(String[] args) {

        int diferencia = calcularAniosDate(31, 12, 2017);

        System.out.println("Diferencia de años: " + diferencia);
    }

    /**
     * Indica la diferencia de años entre un dia concreto y la fecha actual
     * Hecho con Date
     *
     * @param dia
     * @param mes
     * @param anio
     * @return
     */
    public static int calcularAniosDate(int dia, int mes, int anio) {

        //Fecha actual
        Date actual = new Date();

        //Cojo los datos necesarios
        int diaActual = actual.getDate();
        int mesActual = actual.getMonth() + 1;
        int anioActual = actual.getYear() + 1900;

        //Diferencia de años
        int diferencia = anioActual - anio;

        // Si la diferencia es diferencia a 0
        if (diferencia != 0) {

            //Si el mes actual es menor que el que me pasan le resto 1
            //Si el mes es igual y el dia que me pasan es mayor al actual le resto 1
            //Si el mes es igual y el dia que me pasan es menor al actual no le resto 1
            if (mesActual <= mes) { //si if (mesActual == mes) { if (dia > diaActual) {
                        diferencia--;
                    }
                } else {
                    diferencia--;
                }
            }
        }

        return diferencia;

    }

}

  • Pasando 1 parámetro Date: calculamos la diferencia de años entre un día concreto  y la fecha de hoy. Veamos un ejemplo aplicado:
import java.util.Date;

public class EjemploDiferenciaAnios {

    public static void main(String[] args) {

        Date fecha = new Date(117, 11, 31);
        
        int diferencia = calcularAniosDate(fecha);

        System.out.println("Diferencia de años: " + diferencia);
        
    }

    /**
     * Indica la diferencia de años entre un dia concreto y la fecha actual
     * Hecho con Date
     *
     * @param fecha
     * @return
     */
    public static int calcularAniosDate(Date fecha) {

        //Fecha actual
        Date actual = new Date();

        //Cojo los datos necesarios
        int diaActual = actual.getDate();
        int mesActual = actual.getMonth() + 1;
        int anioActual = actual.getYear() + 1900;

        //Diferencia de años
        int diferencia = anioActual - (fecha.getYear() + 1900);

        // Si la diferencia es diferencia a 0
        if (diferencia != 0) {

            //Si el mes actual es menor que el que me pasan le resto 1
            //Si el mes es igual y el dia que me pasan es mayor al actual le resto 1
            //Si el mes es igual y el dia que me pasan es menor al actual no le resto 1
            if (mesActual <= (fecha.getMonth() + 1)) { //si if (mesActual == (fecha.getMonth() + 1)) { if (fecha.getDate() > diaActual) {
                        diferencia--;
                    }
                } else {
                    diferencia--;
                }
            }
        }

        return diferencia;

    }
    
}

  • Pasando 2 parámetros Calendar: calculamos la diferencia de años entre dos calendar. Veamos un ejemplo aplicado:
import java.util.Date;

public class EjemploDiferenciaAnios {

    public static void main(String[] args) {
        
        Date inicio = new Date(117, 11, 31);
        Date fin = new Date(121, 11, 2);
        
        int diferencia = calcularAniosDate(inicio, fin);

        System.out.println("Diferencia de años: " + diferencia);
        
    }
    
    /**
     * Indica la diferencia de años entre un dia concreto y la fecha actual
     * Hecho con Date
     *
     * @param inicio
     * @param fin
     * @return
     */
    public static int calcularAniosDate(Date inicio, Date fin) {

        //Diferencia de años
        int diferencia = (fin.getYear() + 1900) - (inicio.getYear() + 1900);

        // Si la diferencia es diferencia a 0
        if (diferencia != 0) {

            //Si el mes actual es menor que el que me pasan le resto 1
            //Si el mes es igual y el dia que me pasan es mayor al actual le resto 1
            //Si el mes es igual y el dia que me pasan es menor al actual no le resto 1
            if ((inicio.getMonth() + 1) <= (fin.getMonth() + 1)) { //si if ((inicio.getMonth() + 1) == (fin.getMonth() + 1)) { if (inicio.getDate() > fin.getDate()) {
                        diferencia--;
                    }
                } else {
                    diferencia--;
                }
            }
        }

        return diferencia;

    }
}

Este es el resultado en todos los casos:

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

Compartir

Deja una respuesta

Tu dirección de correo electrónico no será publicada.