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 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) {
                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)) { 
                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)) {
                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. Los campos obligatorios están marcados con *