Obtener dias habiles entre un rango de fechas en java

Dias habiles

Aqui le dejo un metodo para obtener los dias habiles entre 2 fechas en java con la Clase Calendar dias habiles me refiero a que son los dias que normalmente se labora me refiero de lunes a viernes, los fines de semana no cuentan como dias habiles en este codigo.


/**
*
* @param fechaInicial
* @param fechaFinal
* @return dias habiles
*/
public int getDiasHabiles(Calendar fechaInicial, Calendar fechaFinal) {
int diffDays= 0;
//mientras la fecha inicial sea menor o igual que la fecha final se cuentan los dias
while (fechaInicial.before(fechaFinal) || fechaInicial.equals(fechaFinal)) {

//si el dia de la semana de la fecha minima es diferente de sabado o domingo
if (fechaInicial.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY
fechaInicial.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY) {
//se aumentan los dias de diferencia entre min y max
diffDays++;
}
//se suma 1 dia para hacer la validacion del siguiente dia.
fechaInicial.add(Calendar.DATE, 1);

}return diffDays;

}

 

 

 

Si también se quisiera descartar los dias festivos tendrian que definir un calendario con las fechas de los dias festivo.

Comentarios

  1. Bitacoras.com dice:

    Información Bitacoras.com…

    Valora en Bitacoras.com: Aqui le dejo un metodo para obtener los dias habiles entre 2 fechas en java con la Clase Calendar dias habiles me refiero a que son los dias que normalmente se labora en otras de lunes a viernes los fines de semana no cuentan…..

  2. Miguel Angel dice:

    Buenas. Este método tiene un pequeño problema. Se trata del caso en el que la fecha fin coincida con fin de semana, y estemos tratando el viernes de dicha semana. Al pasar del jueves al viernes aumentará uno el contador, pero no debería. Se puede observar este error, por ejemplo, introduciendo 11/01/2012 como fecha inicio (miércoles), y 15/01/2012 como fecha fin (domingo). En este caso solamente deberíamos obtener dos días, pero obtenemos tres. De esta forma lo podemos solucionar:

    /**
    * Validación para evitar problemas en rutina de cálculo de días entre fechas, excluyendo fines
    * de semana.
    * En el caso de que la fecha fin sea en fin de semana, fecha inicio y fecha fin pertenezcan a la
    * misma semana, y el día sea viernes, no hay que tenerlo en cuenta, para evitar generar un día de
    * más en el conteo.
    */
    private static boolean validaFechaFinEnFinSemanaMismaSemanaYFechaOrigenViernes(final Calendar fechaInicial, final Calendar fechaFinal){
    boolean bResultado = false;
    if(fechaFinal.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY &&
    fechaFinal.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY){
    return bResultado;
    } else {
    // Si la fecha final es fin de semana comprobamos si fecha inicio y fecha fin pertenecen
    // a la misma semana.
    if(fechaFinal.get(Calendar.YEAR) == fechaInicial.get(Calendar.YEAR) &&
    fechaFinal.get(Calendar.MONTH) == fechaInicial.get(Calendar.MONTH) &&
    fechaFinal.get(Calendar.WEEK_OF_MONTH) == fechaInicial.get(Calendar.WEEK_OF_MONTH)){
    // Si la fecha inicio es viernes, estaremos en el caso de excepción.
    if(fechaInicial.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY){
    bResultado = true;
    }
    }
    }
    return bResultado;
    }

    Agregando este código a la validación de si es sábado o domingo (ojo, con ! delante), se resuelve este pequeño bug.

    ¡¡¡Un saludo!!!