JAVA 计算两个日期之间的工作日天数
程序员文章站
2022-05-18 07:55:25
...
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
public class CalcWorkDays {
/**
* 法定节假日列表
*
* @return
*/
public static List<String> getHolidayList() {
List<String> holidays = new ArrayList<>();
// 元旦
holidays.add("2021-01-01");
holidays.add("2021-01-02");
holidays.add("2021-01-03");
// 春节
holidays.add("2021-02-11");
holidays.add("2021-02-12");
holidays.add("2021-02-13");
holidays.add("2021-02-14");
holidays.add("2021-02-15");
holidays.add("2021-02-16");
holidays.add("2021-02-17");
// 清明节
holidays.add("2021-04-03");
holidays.add("2021-04-04");
holidays.add("2021-04-05");
// 劳动节
holidays.add("2021-05-01");
holidays.add("2021-05-02");
holidays.add("2021-05-03");
holidays.add("2021-05-04");
holidays.add("2021-05-05");
// 端午节
holidays.add("2021-06-12");
holidays.add("2021-06-13");
holidays.add("2021-06-14");
// 中秋节
holidays.add("2021-09-19");
holidays.add("2021-09-20");
holidays.add("2021-09-21");
// 国庆节
holidays.add("2021-10-01");
holidays.add("2021-10-02");
holidays.add("2021-10-03");
holidays.add("2021-10-04");
holidays.add("2021-10-05");
holidays.add("2021-10-06");
holidays.add("2021-10-07");
return holidays;
}
/**
* 需要上班的周末列表
*
* @return
*/
public static List<String> getNeedWorkWeekends() {
List<String> workWeekends = new ArrayList<>();
workWeekends.add("2021-02-07");
workWeekends.add("2021-02-20");
workWeekends.add("2021-04-25");
workWeekends.add("2021-05-08");
workWeekends.add("2021-09-18");
workWeekends.add("2021-09-26");
workWeekends.add("2021-10-09");
return workWeekends;
}
/**
* 计算两个日期之间的工作日天数,包含起始日期,不包含终止日期
*
* @param start
* @param stop
* @return
* @throws ParseException
*/
public static int calc(String start, String stop) throws ParseException {
List<String> workWeekends = getNeedWorkWeekends();
List<String> holidays = getHolidayList();
String pattern = "yyyy-MM-dd";
Date begin = DateUtils.parseDate(start, pattern);
Date end = DateUtils.parseDate(stop, pattern);
Calendar c = Calendar.getInstance();
c.setTime(begin);
int count = 0;
String ymd = null;
while (c.getTime().before(end)) {
ymd = DateFormatUtils.format(c.getTime(), pattern);
// 不是法定节假日
if (!holidays.contains(ymd)) {
// 不是休息日
if (workWeekends.contains(ymd)) {
count++;
System.out.println(ymd);
} else {
// 非周末
if (c.get(Calendar.DAY_OF_WEEK) != 1 && c.get(Calendar.DAY_OF_WEEK) != 7) {
count++;
System.out.println(ymd);
}
}
}
c.add(Calendar.DATE, 1);
}
return count;
}
public static void main(String[] args) throws ParseException {
System.out.println(calc("2021-02-20", "2021-05-30"));
}
}
上一篇: 请假功能中计算有效工作日
下一篇: js计算两个日期之间工作日,去除周末