Calcular el número de días entre 2 Calendar

Hola a todos, hoy os voy a explicar como podemos calcular el numero de días entre 2 Calendar.

La idea es usar el método que tiene la clase Calendar llamada getTimeInMillis(), que nos devuelve el tiempo en milisegundos y despues dividirlo por 86400000, que es el resultado de multiplicar 1000 (ms) * 60(seg) * 60(min) * 24(dias). Es la mejor forma para hacer operaciones con fechas.

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

Clase Calendar en Java

Aquí tenéis el código:


/**
 * Calcular el numero de dias entre 2 calendar.
 *
 * @param inicio Fecha inicial
 * @param fin Fecha final
 * @param incluirFin Indica si queremos incluir la propia fecha final.
 * @return
 */
public static int calculaDiasCalendar(Calendar inicio, Calendar fin, boolean incluirFin) {

    long finMS = fin.getTimeInMillis();
    long inicioMS = inicio.getTimeInMillis();

    int dias = (int) ((Math.abs(finMS - inicioMS)) / (86400000));

    if (incluirFin) {
        dias++;
    }

    return dias;

}

Pongamosla prueba:

 


import java.util.Calendar;

public class CalcularDiasCalendar {

    public static void main(String[] args) {
       
        // 01/01/2019 
        Calendar inicio = Calendar.getInstance();
        inicio.set(Calendar.YEAR, 2019);
        inicio.set(Calendar.MONTH, 0);
        inicio.set(Calendar.DATE, 1);
        inicio.set(Calendar.MINUTE, 0);
        inicio.set(Calendar.SECOND, 0);
        inicio.set(Calendar.MILLISECOND, 0);
        
        // 01/01/2020
        Calendar fin = Calendar.getInstance();
        fin.set(Calendar.YEAR, 2020);
        fin.set(Calendar.MONTH, 0);
        fin.set(Calendar.DATE, 1);
        fin.set(Calendar.MINUTE, 0);
        fin.set(Calendar.SECOND, 0);
        fin.set(Calendar.MILLISECOND, 0);
        
        System.out.println("Numero de dias: " + calculaDiasCalendar(inicio, fin, false));
        
        
        
    }

    /**
     * Calcular el numero de dias entre 2 calendar.
     *
     * @param inicio Fecha inicial
     * @param fin Fecha final
     * @param incluirFin Indica si queremos incluir la propia fecha final.
     * @return
     */
    public static int calculaDiasCalendar(Calendar inicio, Calendar fin, boolean incluirFin) {

        long finMS = fin.getTimeInMillis();
        long inicioMS = inicio.getTimeInMillis();

        int dias = (int) ((Math.abs(finMS - inicioMS)) / (86400000)); //86400000

        if (incluirFin) {
            dias++;
        }

        return dias;

    }

}



 

Esto es lo que devuelve:

Si lo pones a true en el tercer parámetro, devolvería 366.

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 *