java假期顺延求一个日期n天后的日期(排除节假日及周六周日)

1,引入hutool工具类jar

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.7.8</version>
</dependency>

有关hutool的介绍参考其官网API:

https://www.hutool.cn/

2,公共方法如下:
判断是否为假日

public static Boolean isHoliday(String date){
	//freeday为本年的假日日期(我这里为2021年的假期,手动导入)
    ArrayList<String> freedate = new ArrayList<String>(){
        {
            this.add("2021-01-01");
            this.add("2021-01-02");
            this.add("2021-01-03");
            this.add("2021-02-11");
            this.add("2021-02-12");
            this.add("2021-02-13");
            this.add("2021-02-14");
            this.add("2021-02-15");
            this.add("2021-02-16");
            this.add("2021-02-17");
            this.add("2021-04-03");
            this.add("2021-04-04");
            this.add("2021-04-05");
            this.add("2021-05-01");
            this.add("2021-05-02");
            this.add("2021-05-03");
            this.add("2021-05-04");
            this.add("2021-05-05");
            this.add("2021-06-12");
            this.add("2021-06-13");
            this.add("2021-06-14");
            this.add("2021-09-19");
            this.add("2021-09-20");
            this.add("2021-09-21");
            this.add("2021-10-01");
            this.add("2021-10-02");
            this.add("2021-10-03");
            this.add("2021-10-04");
            this.add("2021-10-05");
            this.add("2021-10-06");
            this.add("2021-10-07");
        }
    };
    if (freedate.contains(date)){
        return true;
    }else{
        return false;
    }
}

判断是否为weekday

public static Boolean isWeekday(String date){
    return DateUtil.isWeekend(DateUtil.parse(date,"yyyy-MM-dd"));
}
public static String getMonday(String date){
    if(isWeekday(getTomorrow(date))){
        return getTomorrow(getTomorrow(date));
    }else{
        return getTomorrow(date);
    }
}

求原日期明天

public static String getTomorrow(String date){
    Date now = DateUtil.parse(date,"yyyy-MM-dd");
    String tomorrow = DateUtil.offsetDay(now,1).toString().substring(0,10);
    return tomorrow;
}

求原日期昨天

public static String getYesterday(String date){
    Date now = DateUtil.parse(date,"yyyy-MM-dd");
    String yesterday = DateUtil.offsetDay(now,-1).toString().substring(0,10);
    return yesterday;
}

data参数为待求原日期,sum为求原日期几天日期

public static String getYqsx(String date,int sum) {
	//先判断其是否为weekday,如果为weekday则直接从周一开始计算
    if (isWeekday(date)){
    //这里其实最好也判断一下它得n天后是不是holiday,如果是则再次排除后添加天数
    //isHoliday(monday)
        return DateUtil.offsetDay(DateUtil.parse(getMonday(date),"yyyy-MM-dd"),+4).toString().substring(0,10);
    }else{
        String yqsx = date;
        int adddays = sum;
        while (adddays > 0){
            yqsx = getTomorrow(yqsx);
            if (!isHoliday(yqsx)){
            	//判断其后一天是否为weekday
                if (!isWeekday(yqsx)){
                    adddays--;
                }else{
                    yqsx = getMonday(yqsx);
                    adddays--;
                }
            }
        }
        return yqsx;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值