传入日期和多少个工作日之后,获取结束时间

具体是传入开始时间和天数,查询距离开始时间和具体天数后的时间,得到的结束时间已经除去节假日和法定节假日,调休上班已经处理过逻辑。每年的调休和节假日需要新增。

//计算预计完成时间遇加节日加一
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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值