在项目中遇到增加天数跳过节假日的需求,网上查询各种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();}

Java节假日接口,增加天数跳过节假日相关推荐

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

    跳过节假日和周末不上班案例 方式一:{LIst数据目前需要手动维护} /*** 算出两个时间间隔天数,遇上节假日和不上班周末[可能调休需要上]往后推* @param beginTime* @param ...

  2. 计算有效工作日(跳过节假日)

    在实际开发过程中,我们很多时候会遇到节假日处理的问题.由于前段时间工作需要,所以通过各种平台搜集资料,整理出下面的代码. 备注:主要是给定一个初始日期,然后给定一个时间范围,要求自动跳过节假日以及双休 ...

  3. 智能跳过节假日算法java_java计算两个日期之前的天数实例(排除节假日和周末)...

    java计算两个日期之前的天数实例(排除节假日和周末) 发布时间:2020-09-02 23:07:01 来源:脚本之家 阅读:108 作者:jingxian 如题所说,计算两个日期之前的天数,排除节 ...

  4. 智能跳过节假日算法java_java计算两个日期之间的天数,排除节假日和周末

    如题所说,计算两个日期之前的天数,排除节假日和周末.这里天数的类型为double,因为该功能实现的是请假天数的计算,有请一上午假的为0.5天. 不够很坑的是每个日期都要查询数据库,感觉很浪费时间. 原 ...

  5. 节假日api_iOS能跳过节假日的晚安闹钟捷径

    捷径作为一个非常便利的工具,作为一个不想学习的人,自习时间就会无聊到开始玩捷径.一直以来,节假日闹钟不会自动跳过的问题是困扰着iOS用户的一个问题,专门做一个捷径每天去点一遍--算了,太智障.这个问题 ...

  6. 智能跳过节假日算法java_Quartz 定时任务使用 —— 排除指定节假日时间执行任务(十一)...

    不要混淆了 Quartz 的 Calendar 对象与 Java API 的 java.util.Calendar.它们是应用于不同目的不一样的组件. Java 的 Calendar 对象是通用的日期 ...

  7. 能跳过节假日的闹钟_节后上班的第一天!原来你是这样过假期的!太准了,这也太真实了吧!...

      点击上方蓝色"人生北斗"关注我们! #上班第一天# 一大早就被7点的闹钟吵醒 本想摁掉闹钟继续睡 睁开眼看手机 发现今天是10月9日 "双节"假期已经结束了 ...

  8. 能跳过节假日的闹钟_苏宁小Biu智能闹钟体验:聪明好看,别具风格的“小物件”...

    在智能音箱领域,各家厂商都有很多代表性的产品,比如说小米小爱音箱.天猫精灵.华为小艺智能音箱.荣耀YOYO智能音箱等等,这些智能音箱产品都有一个共同的特点,它们都是以音箱的形式出现在市面上. 苏宁此前 ...

  9. 计算当前日期,经过一段工作日后的日期(跳过节假日)

    /*** 计算当期时间 经过一段工作日后的日期* @param {date} startDate 当前时间* @param {string} limitDay 工作日*/function getWor ...

最新文章

  1. Chrome 技术篇-F12开发者工具清理缓存,高级、专业清浏览器缓存,storage和cache都指什么、区别
  2. FallbackFactory启动的时候抛出异常
  3. 为什么我们需要使用Pandas新字符串Dtype代替文本数据对象
  4. c语言程序设计课件数组,数组(C语言程序设计)课件
  5. 为什么说python是计算机语言的未来_Python这么火,为什么说它不是未来的编程语言?...
  6. ip别名及其在tcp压力测试时候的作用
  7. Android高级开发-布局渲染流程与优化
  8. MATLAB中基于GUI的噪声抑制imnoise,medfilt2命令
  9. ShowAPI识别验证码
  10. 时间片轮转(RR)调度算法(详解版)
  11. CrossApp推出移动应用开发神器 CrossApp Style
  12. JavaWeb之路02--请求与响应
  13. 防火墙 | DDos攻击防范技术
  14. 学习笔记之DNS配置(视图,日志,动态DNS)
  15. 这可能是关于 TCP 和 UDP 最好的一篇文章!!
  16. 高三老师给大一学生的一封信
  17. win11关闭防火墙
  18. 闲扯资管创新1:短债基金和摊余成本法定开债基
  19. 大数据新时代依然需要古老的磁带存储技术
  20. Oracle报错:不是单组分组函数解决

热门文章

  1. 如何设置select,input只读不可编辑且值可传递
  2. 服务器在bios下也自动关机,十大常见的内存BIOS故障现象及解决方案
  3. 35种音乐的分类和解释
  4. WuThreat身份安全云-TVD每日漏洞情报-2023-05-19
  5. 2023上半年软考各省份报名时间已公布!
  6. linux在中国的发展
  7. 【Linux】进程与服务
  8. 30岁的男人学些啥技术好些?
  9. ArcGIS数据处理JPG图片地理配准和矢量化空间校正
  10. 微软封禁俄罗斯下载 Windows 启示录