@Component public class HolidayDateUtil { private static HolidayTimeDao holidayTimeDao; @Autowired public void setHolidayTimeDao(HolidayTimeDao holidayTimeDao) { HolidayDateUtil.holidayTimeDao = holidayTimeDao; } /** * 增加天数跳过节假日 * * @param date * @param n * @return */ public static Date plusDays(Date date, int n) { // 防止重复查询数据库 List<Integer> years = new ArrayList<>(); List<HolidayTime> holidayTimes = new ArrayList<>(); LocalDateTime dateTime = new LocalDateTime(date); for (int i = 0; i < n; i++) { dateTime = dateTime.plusDays(1); while (isWeekDay(dateTime) || isHoliday(dateTime, years, holidayTimes)) { dateTime = dateTime.plusDays(1); } } return dateTime.toDate(); } /** * 判断两个日期之间相差几个工作日 * @param startDate * @param endDate * @return */ public static int intervalDays(Date startDate,Date endDate) { //用Calendar 进行日期比较判断 List<HolidayTime> holidayTimes = new ArrayList<>(); List<Integer> years = new ArrayList<>(); Calendar calendar = Calendar.getInstance(); int days = 0; while (startDate.getTime() <= endDate.getTime()) { // 设置日期 calendar.setTime(startDate); //把日期增加一天 calendar.add(Calendar.DATE, 1); // 获取增加后的日期 startDate = calendar.getTime(); LocalDateTime dateTime = new LocalDateTime(startDate); if (isWeekDay(dateTime) || isHoliday(dateTime, years, holidayTimes)){ continue; } days++; } return days; } /** * 判断是否双休 * * @param dateTime * @return */ private static boolean isWeekDay(LocalDateTime dateTime) { int dayOfWeek = dateTime.getDayOfWeek(); return dayOfWeek == 6 || dayOfWeek == 7; } /** * 判断是否节假日 * * @param dateTime * @param years * @param holidayTimes * @return */ private static boolean isHoliday(LocalDateTime dateTime, List<Integer> years, List<HolidayTime> holidayTimes) { int year = dateTime.getYear(); // 防止重复查询数据库 if (!years.contains(year)) { years.add(year); holidayTimes.addAll(holidayTimeDao.selectList(new QueryWrapper<HolidayTime>().eq("year", year))); } for (HolidayTime holidayTime : holidayTimes) { Range<Date> range = Range.closed(holidayTime.getStartTime(), holidayTime.getEndTime()); if (range.contains(dateTime.toDate())) { return true; } } return false; }
法定假期+调休的日期工具类
最新推荐文章于 2024-07-15 03:12:20 发布