具体是传入开始时间和天数,查询距离开始时间和具体天数后的时间,得到的结束时间已经除去节假日和法定节假日,调休上班已经处理过逻辑。每年的调休和节假日需要新增。 //计算预计完成时间遇加节日加一 public static String calcPlanTime(String beginTime, int day){ //节假日期 List<String> holiday = new ArrayList<>(); holiday.add("2024-01-01"); holiday.add("2024-02-12"); holiday.add("2024-02-13"); holiday.add("2024-02-14"); holiday.add("2024-02-15"); holiday.add("2024-02-16"); holiday.add("2024-04-04"); holiday.add("2024-04-05"); holiday.add("2024-05-01"); holiday.add("2024-05-02"); holiday.add("2024-05-03"); holiday.add("2024-06-10"); holiday.add("2024-09-16"); holiday.add("2024-09-17"); holiday.add("2024-10-01"); holiday.add("2024-10-02"); holiday.add("2024-10-03"); holiday.add("2024-10-04"); holiday.add("2024-10-07"); //调班日期------上班 List<String> extraWorkDay = new ArrayList<>(); extraWorkDay.add("2024-04-28"); extraWorkDay.add("2024-05-11"); extraWorkDay.add("2024-09-14"); extraWorkDay.add("2024-09-29"); extraWorkDay.add("2024-10-12"); while (0 != day) { String ifdate = dateAddOne(beginTime); if (isWorkingDay(ifdate, holiday,extraWorkDay)) { day = day - 1; } beginTime = ifdate; } return beginTime; } //上班日返回true public static Boolean isWorkingDay(String beginDay, List<String> holiday, List<String> extraWorkDay) { //是否加班日 if (extraWorkDay.contains(beginDay)) { return true; } //是否节假日 if (holiday.contains(beginDay)) { return false; } //跳过星期6和星期天 String week = getWeek(beginDay); if ("Saturday".equals(week) || "Sunday".equals(week)) { return false; } return true; } // 计算星期几 public static String getWeek(String dateParm) { DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH); Calendar calendar = Calendar.getInstance(); try { Date date = dateFormat.parse(dateParm); calendar.setTime(date); } catch (ParseException e) { e.printStackTrace(); } String[] weeks = new String[]{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; int weekIndex = calendar.get(Calendar.DAY_OF_WEEK) - 1; if (weekIndex < 0) { weekIndex = 0; } return weeks[weekIndex]; } //日期加+1天 public static String dateAddOne(String param) { Calendar calendar = null; try { calendar = new GregorianCalendar(); calendar.setTime(new SimpleDateFormat("yyyy-MM-dd").parse(param)); calendar.add(calendar.DATE, 1); } catch (ParseException e) { e.printStackTrace(); } Date date = calendar.getTime(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); return sdf.format(date); }
传入日期和多少个工作日之后,获取结束时间
于 2024-12-05 15:25:45 首次发布