Java节假日接口,增加天数跳过节假日

在项目中遇到增加天数跳过节假日的需求,网上查询各种api之后,决定自己开发一个小demo。

此处记载开发思路。

一、初始化每年的日期,并标记工作日、周末、节假日。这里每年初始化一次,然后手动更改日期的类型(0工作日、1节假日、2周末)。

    public boolean doInitThisYearDays(int year) throws BusinessException {
        // 今年年度
        if (0 == year) year = Integer.parseInt(DateTimeUtil.date2YString(new Date()));
        // 循环12个月
        for (int i = 1; i <= 12; i++) {
            // 月份
            String month = i < 10 ? "0" + i : i + "";
            // 每月的天数
            String lastDay = DateTimeUtil.getMonthLastDay(year, i);
            int lastDayInt = Integer.parseInt(lastDay);
            for (int j = 1; j <= lastDayInt; j++) {
                // 天
                String day = j < 10 ? "0" + j : j + "";
                HolidayBDayEntity dayEntity = new HolidayBDayEntity();
                dayEntity.setDayYear(year + "").setDayMonth(month).setDayDay(day).setDayType("0")
                        .setDayYm(year + "-" + month).setDayYmd(year + "-" + month + "-" + day)
                        .setDayTime(DateTimeUtil.parseDate(year + "-" + month + "-" + day)).insert();
                // 周
                Date dayTime = dayEntity.getDayTime();
                // 第几周
                int numberWeek = DateTimeUtil.getNumberWeek(dayTime);
                // 周几
                int weekNumber = DateTimeUtil.getWeekNumber(dayTime);
                int weekNum = weekNumber - 1;
                if (weekNum == 0) weekNum = 7;
                dayEntity.setDayWeek(numberWeek + "").setWeekNum(weekNum + "").updateById();
            }
        }
        return true;
    }

二、增加天数跳过周末

    public String addDaysSkipWeekend(String ymdDate, int days) throws BusinessException {
        Calendar nowTime = Calendar.getInstance();
        nowTime.setTime(DateTimeUtil.parseDate(ymdDate));
        // 增加天数
        for (int i = 0; i < days; i++) {
            // 增加天数
            nowTime.add(Calendar.DATE, 1);
            // 判断日期类型,是否周末
            String isWeek = judgeDateIsHoliday(DateTimeUtil.dateFormat2YmdInteger(nowTime.getTime()));
            log.info("是否周末==={}", isWeek);
            if ("2".equals(isWeek)) {
                i--;
            }
        }
        Date nowTimeTime = nowTime.getTime();
        return DateTimeUtil.dateFormat2YmdString(nowTimeTime);
    }

三、增加天数跳过节假日、周末

    public String addDaysSkipHoliday(String ymdDate, int days) throws BusinessException {
        Calendar nowTime = Calendar.getInstance();
        nowTime.setTime(DateTimeUtil.parseDate(ymdDate));
        // 增加天数
        for (int i = 0; i < days; i++) {
            // 增加天数
            nowTime.add(Calendar.DATE, 1);
            // 判断日期类型,是否工作日
            String isWork = judgeDateIsHoliday(DateTimeUtil.dateFormat2YmdInteger(nowTime.getTime()));
            if (!"0".equals(isWork)) {
                i--;
            }
        }
        Date nowTimeTime = nowTime.getTime();
        return DateTimeUtil.dateFormat2YmdString(nowTimeTime);
    }

核心思想:循环需要增加的天数,如果日期类型不等于需要跳过的节假日,则--,再次进入循环。

判断日期类型judgeDateIsHoliday()。

    public String judgeDateIsHoliday(String ymdDate) throws BusinessException {
        String ymdString = DateTimeUtil.dateFormat2YmdString(DateTimeUtil.parseDate(ymdDate));
        HolidayBDayEntity dayEntity = holidayBDayMapper.selectOne(new QueryWrapper<HolidayBDayEntity>().eq("day_ymd", ymdString));
        return dayEntity.getDayType();
    }

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值