原代碼已實現「排除周末、按上下班時間計算工時」,缺少「動態排除法定節假日及調休上班日」邏輯。
{
"2024": {
"holidays": ["01-01","02-10","02-11",...],
"workdays": ["02-04","02-18",...] // 調休上班日
}
}
boolean isHoliday(LocalDate date) {
String key = date.format(DateTimeFormatter.ofPattern("MM-dd"));
YearConfig cfg = configMap.get(date.getYear());
return cfg.holidays.contains(key) && !cfg.workdays.contains(key);
}
boolean isWeekend(LocalDate date) {
DayOfWeek dow = date.getDayOfWeek();
return dow == DayOfWeek.SATURDAY || dow == DayOfWeek.SUNDAY;
}
boolean isWorkingDay(LocalDate date) {
return !isWeekend(date) && !isHoliday(date);
}
while (current.isBefore(end) || current.isEqual(end)) {
if (isWorkingDay(current)) {
// 累加當日工時
}
current = current.plusDays(1);
}
java.time 包(LocalDate、LocalTime、Duration)替代老舊 Date/Calendar,代碼更清晰、線程安全。回答中提供的 isOverDay/isHodliDays 方法展示了基於字符串匹配的簡易判斷邏輯,可作為起點擴展為完整配置驅動方案。