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.
Bitacoras.com
octubre 17, 2010 at 2:14 amInformació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…..
Días Hábiles con Java ( Quitar sábados y domingos ) « Darkchicles the blog
enero 17, 2011 at 2:16 pm[…] http://godieboy.com/2010/10/obtener-dias-habiles-entre-2-fechas-en-java.html […]
Miguel Angel
octubre 27, 2015 at 1:36 amBuenas. 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!!!
Juan José Carmona Martinez
septiembre 27, 2021 at 5:03 amSolo se tenÃa que cambiar el operador || por && y el calculo ya lo hace bien
public static 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;
}