准备工作,新建一个存放法定节假日和调休工作日的一张表(代码中为sysWorkDate表)。主要字段为日期、类型(区分节假日、调休日)。
/**
* 判断日期是否为节假日
* 入参:要校验的时间
* 返回参数:该日期为工作日,则返回该日期。该日期为休息日,返回下一个工作日。
* */
@Override
public Date checkWorkDate(Date workDate) {
Date returnDate = new Date();
//判断是否为周末
boolean isWeekend = checkIsWeek(workDate);
//周末判断是否为工作日
if (isWeekend) {
SysWorkDate isWorkDate = new SysWorkDate();
isWorkDate.setDateValue(workDate);//日期
isWorkDate.setDateType("2");//判断是否为2调休工作日
int isWork = sysWorkDateMapper.checkWorkDate(isWorkDate);
if (isWork > 0) {
returnDate = workDate;
} else {
// 使用Calendar对象加一天
Calendar calendar = Calendar.getInstance();
calendar.setTime(workDate);
calendar.add(Calendar.DATE, 1); // 在当前日期基础上加一天
// 获取加一天后的日期
return checkWorkDate(calendar.getTime());
}
} else {
//不是周末,是否为节假日
SysWorkDate isVacationWorkDate = new SysWorkDate();
isVacationWorkDate.setDateValue(workDate);//日期
isVacationWorkDate.setDateType("1");//判断是否为1节假日
int isVacation = sysWorkDateMapper.checkWorkDate(isVacationWorkDate);
if (isVacation > 0) {
// 使用Calendar对象加一天
Calendar calendar = Calendar.getInstance();
calendar.setTime(workDate);
calendar.add(Calendar.DATE, 1); // 在当前日期基础上加一天
// 获取加一天后的日期
return checkWorkDate(calendar.getTime());
} else {
returnDate = workDate;
}
}
return returnDate;
}
此处为校验Date日期是否为星期六、星期日的公共方法
public boolean checkIsWeek(Date workDate) {
//判断该日期是否为周末
SimpleDateFormat sdf = new SimpleDateFormat("EEEE"); // 格式化日期为星期几的字符串
//不是节假日,判断是否为周末
String dayOfWeek = sdf.format(workDate);
return dayOfWeek.equals("星期六") || dayOfWeek.equals("星期日");
}