Obtener dias habiles entre un rango de fechas en java

Dias habiles

Aqui le dejo un método para obtener los días hábiles entre 2 fechas en java con la Clase Calendar días hábiles me refiero a que son los días que normalmente se labora me refiero de lunes a viernes, los fines de semana no cuentan como días hábiles en este código.

/**
*
* @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 días de diferencia entre min y max
   diffDays++;
   }
  //se suma 1 dia para hacer la validación del siguiente dia.
  fechaInicial.add(Calendar.DATE, 1);
  }
return diffDays;
}

Si también se quisiera descartar los días festivos tendrán que definir un calendario con las fechas de los días festivo.


Warning: Missing argument 1 for cwppos_show_review(), called in /home/godie/godieboy.com/wp-content/themes/flat/content-single.php on line 29 and defined in /home/godie/godieboy.com/wp-content/plugins/wp-product-review/includes/legacy.php on line 18

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!!!