1、判断当前日期是否为工作日{isWorkingDay(Date date);}
2、判断当前时间是否为工作时间{workTime(Date date);}
3、判断当前时间是否在时间段内{belongCalendar(Date nowTime, Date beginTime, Date endTime);}
import java.text.SimpleDateFormat;
import java.time.DayOfWeek;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
* @ClassName HolidayUtil
* @Description 判断工作日、工作时间工具类
* @Author Kai
* @Date 2023/2/21 14:57
* @Version 1.0
**/
public class HolidayUtil {
private static final String workTime ="9:00:00";//上班时间
private static final String restTime ="17:00:00";//休息时间
private static final SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss"); // 设置日期格式
private static List<String> holiday =new ArrayList<>();
private static List<String> extraWorkDay =new ArrayList<>();
/**
* @Author Wang.YuanKai
* @Description 判断当前日期是否为工作日
* @Date 10:29 2023/3/1
* @Param [date]
* @return java.lang.Boolean
**/
public static Boolean isWorkingDay(Date date) {
LocalDateTime dateTime = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
String formatTime = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
initHoliday();
initExtraWorkDay();
//是否调休日期
if(extraWorkDay.contains(formatTime)){
return true;
}
//是否节假日
if(holiday.contains(formatTime)){
return false;
}
//如果是1-5表示周一到周五 是工作日
DayOfWeek week = dateTime.getDayOfWeek();
return week != DayOfWeek.SATURDAY && week != DayOfWeek.SUNDAY;
}
public static void main(String[] args) {
Boolean workingDay = isWorkingDay(new Date());
if(workingDay){
System.out.println("工作日,加油,打工人");
}else {
System.out.println("开开心心过节,高高兴兴干饭!!!");
}
}
/**
* @Author Kai
* @Description 初始话节假日,需要手动录入当年放假调休的上班时间
* @Date 10:30 2023/3/1
* @Param
**/
public static void initHoliday(){
holiday.add("2023-04-05");
holiday.add("2023-04-29");
holiday.add("2023-04-30");
holiday.add("2023-05-01");
holiday.add("2023-05-02");
holiday.add("2023-05-03");
holiday.add("2023-06-22");
holiday.add("2023-06-23");
holiday.add("2023-06-24");
holiday.add("2023-09-29");
holiday.add("2023-09-30");
holiday.add("2023-10-01");
holiday.add("2023-10-02");
holiday.add("2023-10-03");
holiday.add("2023-10-04");
holiday.add("2023-10-05");
holiday.add("2023-10-06");
}
/**
* @Author Kai
* @Description 初始化额外加班日,,需要手动录入当年放假调休的休息时间
* @Date 10:32 2023/3/1
* @Param
**/
public static void initExtraWorkDay(){
extraWorkDay.add("2023-04-23");
extraWorkDay.add("2023-05-06");
extraWorkDay.add("2023-06-25");
extraWorkDay.add("2023-10-07");
extraWorkDay.add("2023-10-08");
}
/**
* @Author Kai
* @Description 判断当前时间是否为工作时间(不判断工作日)
* @Date 10:32 2023/3/1
* @Param [now]
* @return boolean
**/
public static boolean workTime(Date now){
Calendar calendar = Calendar.getInstance();
calendar.setTime(now); //放入Date类型数据
calendar.get(Calendar.HOUR_OF_DAY); //时(24小时制)
calendar.get(Calendar.MINUTE); //分
calendar.get(Calendar.SECOND); //秒
Date beginTime = null;
Date endTime = null;
try {
beginTime = df.parse(workTime);
endTime = df.parse(restTime);
} catch (Exception e) {
e.printStackTrace();
}
assert beginTime != null;
return belongCalendar(calendar.getTime(), beginTime, endTime);
}
/**
* @Author Kai
* @Description 判断时间是否在时间段内
* @Date 10:35 2023/3/1
* @Param
**/
public static boolean belongCalendar(Date nowTime, Date beginTime, Date endTime) {
if (nowTime.getTime() == beginTime.getTime()
|| nowTime.getTime() == endTime.getTime()) {
return true;
}
Calendar date = Calendar.getInstance();
date.setTime(nowTime);
Calendar begin = Calendar.getInstance();
begin.setTime(beginTime);
Calendar end = Calendar.getInstance();
end.setTime(endTime);
return date.after(begin) && date.before(end);
}
}