java获取工作日
程序员文章站
2022-05-17 21:26:24
...
/**
* 获取指定时间的前beforeNum个工作日
*
* @param appointDate 指定时间
* @param beforeNum 前beforeNum个工作日
* @param holidays 节假日日期集合
* @param restDays 调休日日期集合(即补班日日期,例10.1-10.7国庆节,10.9周六上班,即10.9为调休日)
* @return 工作日日期集合
*/
public List<Date> getBeforeNumDate(Date appointDate,int beforeNum,
List<String> holidays,List<String> restDays ) {
Calendar calendar = Calendar.getInstance();
List<Date> dateList = new ArrayList<>();
int i = 1;
do {
Date date = dateAddTime(appointDate, Calendar.DATE, -i);
boolean holidayOrFestival = HolidayUtil.isHolidayOrFestival(date, holidays,restDays);
if (!holidayOrFestival) {
dateList.add(date);
}
i++;
} while (dateList.size() != beforeNum);
return dateList;
}
/**
* 判断当天是否是节假日
* @param holidays 节假日日期集合
* @param restDays 调休日日期集合(即补班日日期,例10.1-10.7国庆节,10.9周六上班,即10.9为调休日)
* @return 非工作时间:true;工作时间:false
*/
public static boolean isHolidayOrFestival(Date date, List<String> holidays, List<String> restDays) {
boolean result = false;
boolean isHolidayTmp = isHoliday(date, holidays);
if (isHolidayTmp) {
result = true;
} else {
Calendar c = Calendar.getInstance();
c.setTime(date);
//周末直接为非工作时间
if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY || c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
String dateStr = DateUtils.dateToString(date, "yyyy-MM-dd");
result = true;
//周末是否再法定调休日期中
if (restDays != null && restDays.size() > 0) {
if (restDays.contains(dateStr)) {
result = false;
}
}
}
// else {//9点到17:30为工作时间
// int hour = c.get(Calendar.HOUR_OF_DAY);
// int minute = c.get(Calendar.MINUTE);
// if (hour < 9 || (hour == 17 && minute > 30) || hour >= 18) {
// result = true;
// }
// }
}
return result;
}
/**
* 根据判断当前时间是否是节日
* @param holidays 节假日日期集合
* @return true:节假日 , false:非节假日
*/
private static boolean isHoliday(Date date, List<String> holidays) {
boolean result = false;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String dateStr = sdf.format(date);
if (holidays != null && holidays.size() > 0) {
if (holidays.contains(dateStr)) {
result = true;
}
}
return result;
}
/**
* 给指定日期加上指定时间
*
* @param date 日期
* @param way 方式 如:秒 Calendar.SECOND
* @param duration 时长 如加10秒
* @return
*/
public static Date dateAddTime(Date date, int way, int duration) {
Calendar newTime = Calendar.getInstance();
newTime.setTime(date);
newTime.add(way, duration);
return newTime.getTime();
}
上一篇: vue3.0中使用nextTick