除过法定节假日,计算截至日期的算法

1.获取当年节假日信息
请求链接:https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php? query=2020&resource_id=6018
组装所有节假日及调休

private static JSONArray getHoliday() {String s = HttpUtil.get("https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?       query=2020&resource_id=6018");JSONObject jsonObject = JSONObject.parseObject(s);JSONArray data = (JSONArray) jsonObject.get("data");JSONObject item = (JSONObject) data.get(0);JSONArray holidays = item.getJSONArray("holiday");JSONArray jsonArray = new JSONArray();holidays.stream().forEach(it -> {JSONObject holiday = (JSONObject) it;JSONArray list = holiday.getJSONArray("list");for (Object o : list) {JSONObject i = (JSONObject) o;if (null == i.getJSONArray("list")) {jsonArray.add(i);} else {jsonArray.addAll(i.getJSONArray("list"));}}});//组装格式为为 "list":[  {  "date":"2020-1-1","status":"1" }  ] status  1: 代表假期   2:调休工作日return jsonArray;}

给定日期数组,以及获取的假期数据,计算去除法定节假日以及周末后的截至日期

对所有日期数组进行遍历,逐个进行判断处理

    private static DateTime getLimitTime(List<DateTime> dateTimes, JSONArray jsonArray) {List<String> date = jsonArray.stream().map(it -> ((JSONObject) it).getString("date")).collect(Collectors.toList());Map<String, String> map = jsonArray.stream().collect(Collectors.toMap(it -> ((JSONObject) it).getString("date"), it -> ((JSONObject) it).getString("status"), (pre, next) -> pre));DateTime offsetDate = null;for (int i = 0; i < dateTimes.size(); i++) {String formatDate = DateUtil.format(dateTimes.get(i), "yyyy-M-d");if (i == 0) {continue;}if (date.contains(formatDate)) {String status = map.get(formatDate);if ("1".equals(status)) {offsetDate = DateUtil.offsetDay(dateTimes.get(i), dateTimes.size() - i);dateTimes.add(offsetDate);}} else {int week = DateUtil.dayOfWeek(dateTimes.get(i));if ((week == 1 || week == 7)) {offsetDate = DateUtil.offsetDay(dateTimes.get(i), dateTimes.size() - i);dateTimes.add(offsetDate);}else {offsetDate = dateTimes.get(i);}}}return offsetDate;}

主方法 ,执行

先获取当前日期和截至天数有日期数组,然后就获取到当前日期距离天数后除过法定节假日后得到的截至日期

    public static void main(String[] args) {JSONArray jsonArray = getHoliday();DateTime date = DateUtil.parseDate("2020-09-25");DateTime dateTime = DateUtil.offsetDay(date, 5);List<DateTime> dateTimes = DateUtil.rangeToList(date, dateTime, DateField.DAY_OF_YEAR);DateTime limitTime = getLimitTime(dateTimes, jsonArray);System.out.println(limitTime);}

如果你有好的思路算法,请在下方评论处进行讨论

除过法定节假日,计算截至日期的算法相关推荐

  1. php根据当前日期判断法定节假日_判断日期是否为法定节假日的API接口与示例函数...

    需要判定某日期是否为法定节假日,由于国家的节假日每年都在变动,所以使用接口判定是必要的.可惜的是,这样的接口并不多,在此汇总三个: 前两个看起来是个人的,最后一个是聚合数据的万年历接口. 请注意,本文 ...

  2. Hive3.0.0自定义UDF函数获取每月结合国家法定节假日工作日数实现

    1.客户需求 根据每月工作日并结合国家法定节假日计算工作量(必须给我实现,我不管你们用什么方法) 2.现状 由hive默认函数不支持该需求,那只好自己动手来写了,在不可能也要创造可能啊,毕竟客户god ...

  3. 超实用工具:获取法定节假日、休息日、周末天数

    我们国家有法定节假日,有因为法定节假日需要额外补班的周末,还有平常普通的周末,如何创建一个工具类,能很方便的知道这些信息呢?如下的代码能实现这些功能: 给定日期,判断是否是法定节假日. 给定日期,判断 ...

  4. 政策解读|2023法定节假日安排发布了,HR需要跟进的三件事

    国务院办公厅发布了关于2023年部分节假日安排的通知 全文如下 各省.自治区.直辖市人民政府,国务院各部委.各直属机构: 经国务院批准,现将2023年元旦.春节.清明节.劳动节.端午节.中秋节和国庆节 ...

  5. 2020-2023年周末、法定节假日、工作日标签

    2020-2023年周末.法定节假日.工作日 日期 类型(0-工作日,1-周末,2-节假日) 2021-01-01 2 2021-01-02 2 2021-01-03 2 2021-01-04 0 2 ...

  6. sqlserver计算两个日期之间的工作日(剔除周末及法定节假日)

    sqlserver计算两个日期之间的工作日(剔除周末及法定节假日) create function [dbo].[WorkDay] ( @beginday datetime, @endday date ...

  7. java获取法定节假日_java 获取n个工作日后的日期(包含法定节假日、双休日、节后补班)...

    1.说明: 获取n个工作日后的日期(包含法定节假日.双休日.节后补班),需要在数据库手动入库当年的法定节假日及节假日调休补班.(也可写在配置文件中读取) 2.工具类代码 import java.tex ...

  8. java 法定节假日_java 获取n个工做往后的日期(包含法定节假日、双休日、节后补班)...

    1.说明:java 获取n个工做往后的日期(包含法定节假日.双休日.节后补班),须要在数据库手动入库当年的法定节假日及节假日调休补班.(也可写在配置文件中读取)sql 2.工具类代码数据库 impor ...

  9. SqlServer计算2个时间的间隔时间(工作日时间),不包括法定节假日和周末

    最近在统计计算的时候,有一个需求是计算关闭时间-开始时间的小时数,但是如果中间有周末或者法定节假日不能包括在内,只计算工作日的小时数 在网上查询了很多资料后发现,有2种做法  第1种是使用存储过程的方 ...

最新文章

  1. Python库os使用笔记
  2. 机器学习在信道建模中的应用综述
  3. Node - 异步IO和事件循环
  4. DEEPIN 20安装镜像进入LIVE模式
  5. java svg image xlink_SVG基础 | SVG image 元素
  6. 3ds Max制作一面飘扬的旗帜效果图
  7. 公共mysql数据库_公共MySQL的数据库服务器层
  8. Tornado入门之旅
  9. Backup--查看备份还原需要的空间
  10. 索然无味的正则表达式
  11. Linux目录--proc详解
  12. 文件服务器资源管理器类似软件,好用的小众文件管理软件推荐给大家
  13. mongoengine fields详解
  14. 安卓虚拟摄像头_iPhone 的“第四颗摄像头”位置,为什么给了激光雷达?
  15. 动物识别系统代码python_人工智能-动物识别专家系统算法Python + Pyqt 实现
  16. xftp本地同步到服务器文件夹,如何停止Xftp更新和同步浏览服务器?
  17. android 百度地图线路规划问题
  18. 数据计量单位的换算关系
  19. 5G 频段内CA培训
  20. java遍历数组的三种方式

热门文章

  1. 内部存储与外部存储的区别
  2. 远程连接桌面不能全屏显示
  3. 【网络安全】常见的网路安全设备及功能作用总结
  4. 代码随想录 二叉树.26 236 二叉树最近公共祖先
  5. php札记,PHP学习札记(一)
  6. 图片文字识别OCR模型免费API接口工具及DEMO
  7. 【快速幂】HRBUST 2263 萝莉控型提督
  8. linux下精简安卓rom,ROM助手精简版
  9. 光子的双缝干涉实验:只有单个光子才能产生所谓的干涉现象
  10. C++获取CPUID