java中求某个时间跳过节假日和周末

跳过节假日和周末不上班案例

方式一:{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);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值