跳过节假日和周末不上班案例
方式一:{LIst数据目前需要手动维护}
/**
* 算出两个时间间隔天数,遇上节假日和不上班周末【可能调休需要上】往后推
* @param beginTime
* @param endTime
* @return
* @throws ParseException
*/
public static Integer get(String beginTime, String endTime) throws ParseException {
// 2022-12-31
LocalDate beginDate = LocalDate.parse(beginTime);
LocalDate endDate = LocalDate.parse(endTime);
//定义不工作的list[不调休的周末】
List<String> holiday = new ArrayList<>();
holiday.add("2022-10-24");
holiday.add("2022-10-25");
holiday.add("2022-10-01");
holiday.add("2022-10-02");
holiday.add("2022-10-03");
holiday.add("2022-10-04");
holiday.add("2022-10-05");
holiday.add("2022-10-06");
holiday.add("2022-10-07");
holiday.add("2022-10-15");
holiday.add("2022-10-16");
holiday.add("2022-10-22");
holiday.add("2022-10-23");
holiday.add("2022-10-29");
holiday.add("2022-10-30");
holiday.add("2022-11-05");
holiday.add("2022-11-06");
//判断它是不是在不工作的list中,在就往下加一
Boolean flag = true;
String temp = endTime ;
while(flag){
if (holiday.contains(temp)){
//String date="2022-12-31"; 加一
temp = LocalDate.parse(temp).plusDays(1).toString();
}else {
flag = false;
}
}
LocalDate endValue = LocalDate.parse(temp);
// 天数
int sum = (int) (endValue.toEpochDay() - beginDate.toEpochDay());
return sum;
}
方式二{LIst数据目前需要手动维护}
/**
* 算出两个时间间隔天数,遇上节假日往后推
* @param beginTime
* @param endTime
* @return
* @throws ParseException
*/
public static Integer get2(String beginTime, String endTime) throws ParseException {
// 2022-12-31
LocalDate beginDate = LocalDate.parse(beginTime);
LocalDate endDate = LocalDate.parse(endTime);
//定义放假的list
List<String> holiday = new ArrayList<>();
//中秋节
holiday.add("2022-09-10");
holiday.add("2022-09-11");
holiday.add("2022-09-12");
//国庆节
holiday.add("2022-10-01");
holiday.add("2022-10-02");
holiday.add("2022-10-03");
holiday.add("2022-10-04");
holiday.add("2022-10-05");
holiday.add("2022-10-06");
holiday.add("2022-10-07");
//加班的周末
List<String> nWeek = new ArrayList<>();
// 国庆周末调休
nWeek.add("2022-10-08");
nWeek.add("2022-10-09");
String temp = skipWork(endTime,holiday,nWeek);
LocalDate endValue = LocalDate.parse(temp);
// 天数
int sum = (int) (endValue.toEpochDay() - beginDate.toEpochDay());
return sum;
}
/**
* 得到时间往后推的最终时间
* @param dateTime 时间
* @param holiday 放假时间
* @param nWeek 周末需要工作时间
* @return XXXX-XX-XX 最终时间
*/
public static String skipWork(String dateTime,List<String> holiday,List<String> nWeek){
Boolean flag = true;
String temp = dateTime ;
while (flag){
LocalDate endDate = LocalDate.parse(temp);
DayOfWeek week = endDate.getDayOfWeek();
if (holiday.contains(temp)){
// 判断是放假--holiday
temp = LocalDate.parse(temp).plusDays(1).toString();
continue;
} else if((week == DayOfWeek.SATURDAY || week == DayOfWeek.SUNDAY) && !nWeek.contains(temp)) {
//判断是为周末并且不加班
temp = LocalDate.parse(temp).plusDays(1).toString();
}else {
flag = false;
}
}
return temp;
}
主函数
public static void main(String[] args) throws ParseException {
int hh = get2("2022-09-30","2022-10-01");
System.out.println(hh);
}