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