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:
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.
Deja una respuesta