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

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

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

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

Clase Calendar en 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 (creando un calendar con los parámetros pasados) y la fecha de hoy. Veamos un ejemplo aplicado:
import java.util.Calendar;

public class EjemploDiferenciaAnios {

    public static void main(String[] args) {

        int dia = 31;
        int mes = 12;
        int anio = 2017;
        
        int diferencia = calcularAniosCalendar(dia, mes, anio);
        
        System.out.println("Diferencia de " + diferencia + " años");
        
    }

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

        // Seteamos el dia mes y año
        Calendar inicio = Calendar.getInstance();
        inicio.set(anio, mes - 1, dia);

        // Dia actual
        Calendar actual = Calendar.getInstance();

        // Calcula la diferencia de años
        int diferencia = actual.get(Calendar.YEAR) - inicio.get(Calendar.YEAR);

        // Si la diferencia de años es 0, no hay que restar nada
        // Si el año del dia de la fecha que yo paso es mayor que la actual, resto uno
        if (diferencia != 0 && inicio.get(Calendar.DAY_OF_YEAR) > actual.get(Calendar.DAY_OF_YEAR)) {
            diferencia--;
        }

        return diferencia;

    }

}

  • Pasando 1 parámetro Calendar: calculamos la diferencia de años entre un día concreto (el calendar que hemos pasado) y la fecha de hoy. Veamos un ejemplo aplicado:
import java.util.Calendar;

public class EjemploDiferenciaAnios {

    public static void main(String[] args) {

        Calendar c = Calendar.getInstance();
        c.set(Calendar.DATE, 31);
        c.set(Calendar.MONTH, 11);
        c.set(Calendar.YEAR, 2021);
        
        int diferencia = calcularAniosCalendar(c);
        
        System.out.println("Diferencia de " + diferencia + " años");
       
    }

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

        // Dia actual
        Calendar actual = Calendar.getInstance();

        // Calcula la diferencia de años
        int diferencia = actual.get(Calendar.YEAR) - inicio.get(Calendar.YEAR);

        // Si la diferencia de años es 0, no hay que restar nada
        // Si el año del dia de la fecha que yo paso es mayor que la actual, resto uno
        if (diferencia != 0 && inicio.get(Calendar.DAY_OF_YEAR) > actual.get(Calendar.DAY_OF_YEAR)) {
            diferencia--;
        }

        return diferencia;

    }

}

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

public class EjemploDiferenciaAnios {

    public static void main(String[] args) {

        Calendar c1 = Calendar.getInstance();
        c1.set(Calendar.DATE, 31);
        c1.set(Calendar.MONTH, 11);
        c1.set(Calendar.YEAR, 2017);
        
        Calendar c2 = Calendar.getInstance();
        c2.set(Calendar.DATE, 2);
        c2.set(Calendar.MONTH, 11);
        c2.set(Calendar.YEAR, 2021);
        
        int diferencia = calcularAniosCalendar(c1, c2);
        
        System.out.println("Diferencia de " + diferencia + " años");
        
    }

    /**
     * Indica la diferencia de años entre dos Calendar.
     *
     * @param inicio fecha inicial
     * @param fin fecha final
     * @return
     */
    public static int calcularAniosCalendar(Calendar inicio, Calendar fin) {

        // Calcula la diferencia de años
        int diferencia = fin.get(Calendar.YEAR) - inicio.get(Calendar.YEAR);

        // Si la diferencia de años es 0, no hay que restar nada
        // Si el año del dia de la fecha que yo paso es mayor que la actual, resto uno
        if (diferencia != 0 && inicio.get(Calendar.DAY_OF_YEAR) > fin.get(Calendar.DAY_OF_YEAR)) {
            diferencia--;
        }

        return diferencia;

    }

}
En todos los casos el resultado es el siguiente:
También os dejo un vídeo:

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.