我有一个不会崩溃的函数,但它需要很长时间并且会显示很多错误(据我说,它们不是)。
必须是以下之一:Calendar.SUNDAY、Calendar.MONDAY、Calendar.TUESDAY、Calendar.WEDNESDAY、Calendar.THURSDAY、Calendar.FRIDAY、Calendar.SATURDAY
这些行将我标记为错误:
Calendar.JANUARY, Calendar.MAY, Calendar.SEPTEMBER, Calendar.DECEMBER.
cal2.get(Calendar.DATE)==1, cal2.get(Calendar.DATE)==18, cal2.get(Calendar.DATE)==19, cal2.get(Calendar.DATE)==25.
这是我的代码:
// calcula los dias que faltan para que venza el ticket
public Integer getDiasLaborales () {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
Date fechaActual = sdf.parse(sdf.format(Calendar.getInstance().getTime()));
Date fechaTermino = sdf.parse(fecha_termino);
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.setTime(fechaTermino);
cal2.setTime(fechaActual);
float dias = (float)(fechaTermino.getTime() - fechaActual.getTime()) / 86400000; // 1 dia = 1000*60*60*24*1
float numberOfDays = Math.abs(dias) - Math.abs((int) dias) - 1; // valor absoluto
if(dias < 0) {
while (cal1.before(cal2)) {
if ((cal1.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY) // Los Domingos
&&!(((cal1.get(Calendar.DATE) == 1) &&(cal1.get(Calendar.MONTH) == Calendar.JANUARY)) // Año Nuevo
&&((cal1.get(Calendar.DATE) == 1) &&(cal1.get(Calendar.MONTH) == Calendar.MAY) // Día Nacional del Trabajo
&&((cal1.get(Calendar.DATE) == 18) &&(cal1.get(Calendar.MONTH) == Calendar.SEPTEMBER)) // Independencia Nacional
&&((cal1.get(Calendar.DATE) == 19) && (cal1.get(Calendar.MONTH) == Calendar.SEPTEMBER)) // Día de las Glorias del Ejército
&&((cal1.get(Calendar.DATE) == 25) &&(cal1.get(Calendar.MONTH) == Calendar.DECEMBER)) // Navidad
)){
numberOfDays++;
}
cal1.add(Calendar.DATE, 1);
}
numberOfDays = numberOfDays * -1;
} else {
while (cal2.before(cal1)) {
if ((cal2.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY) // Los Domingos
&& !(((cal2.get(Calendar.DATE) == 1) &&(cal2.get(Calendar.MONTH) == Calendar.JANUARY)) // Año Nuevo
&& ((cal2.get(Calendar.DATE) == 1) && (cal2.get(Calendar.MONTH) == Calendar.MAY)) // Día Nacional del Trabajo
&& ((cal2.get(Calendar.DATE) == 18) && (cal2.get(Calendar.MONTH) == Calendar.SEPTEMBER)) // Independencia Nacional
&& ((cal2.get(Calendar.DATE) == 19) && (cal2.get(Calendar.MONTH) == Calendar.SEPTEMBER)) // Día de las Glorias del Ejército
&& ((cal2.get(Calendar.DATE) == 25) && (cal2.get(Calendar.MONTH) == Calendar.DECEMBER)) // Navidad
)){
numberOfDays++;
}
cal2.add(Calendar.DATE,1);
}
}
//Log.d(TAG, String.format("%s : %.2f ---> %.2f", sdf.format(fechaTermino), dias, numberOfDays));
//Log.d(TAG, dias+" ---> "+numberOfDays+"\n\n");
return numberOfDays > 0 ? (int)Math.ceil(numberOfDays) : (int)Math.floor(numberOfDays); //ceil: redondea arriba cualquier decimal y floor: quita el decimal y lo aproxima para abajo
} catch (ParseException e) {
e.printStackTrace();
return null;
}
}
是什么导致了这个错误,我该如何解决?
计算工作日Java
返回周一到周五的工作日数的示例,不考虑周六、周日和节假日,例如 1 月 1 日、12 月 25 日,我们将其添加到非工作日列表中,并获取给出的工作日天数日期范围,开始日期和结束日期。
在此处查看完整示例