java计算工作日(包含法定节假日和调休) 您所在的位置:网站首页 日期计算天数查询软件 java计算工作日(包含法定节假日和调休)

java计算工作日(包含法定节假日和调休)

2023-08-19 00:47| 来源: 网络整理| 查看: 265

需要解决的两个问题: 怎么判断一个日期是否是工作日怎么有法定节假日和调休的数据 思路: 通过 jdk 自带的 Calendar 类获取日期的星期值,按正常周一到周五5天计算工作日(法定节假日、调休额外判断,另加处理)法定节假日和调休的日期数据可以手动维护在一个配置文件中,在程序中读取配置文件获取;但这样比较死板,每年的数据都会变化,这样每次都需要手动维护很不方便;改进下,使用第三方接口获取这些节假日数据,解析存储下来;这里使用天行API的节假日接口 实现: @Component public class ComputeWorkingDayUtil { //定义两个List,一个存放节假日日期,另一个存放调休的工作日期 private static List HOLIDAY_LIST = new ArrayList(); private static List SPECIAL_WORKDAY_LIST = new ArrayList(); //静态代码块内调用第三方接口拿到数据存进List中 static { Map param = new HashMap() {{ put("key", "");//这里key值是注册天行API账号是给的 put("type", 1); }}; //获取当前年份,循环调用3次,拿到3年的数据 int currentYear = Calendar.getInstance().get(Calendar.YEAR); for (int i=0; i JSONArray newslist = (JSONArray) resObj.get("newslist"); for (Object listObj : newslist) { JSONObject obj = (JSONObject) listObj; String holidays = (String) obj.get("vacation"); String[] holidayArray = holidays.split("\\|"); HOLIDAY_LIST.addAll(Arrays.asList(holidayArray)); String remark = (String) obj.get("remark"); if (StringUtils.isNotEmpty(remark)) { String[] special = remark.split("\\|"); SPECIAL_WORKDAY_LIST.addAll(Arrays.asList(special)); } } } } } //计算工作日数的方法 public static int computeWorkingDays(Date start, Date end) { Calendar startCal = Calendar.getInstance(); Calendar endCal = Calendar.getInstance(); startCal.setTime(start); endCal.setTime(end); int workDays = 0; //如果没有严格按照起始结束时间传值,在这里纠正下,可以注释掉 if (startCal.getTimeInMillis() > endCal.getTimeInMillis()) { startCal.setTime(end); endCal.setTime(start); } while (startCal.getTimeInMillis() if (!HOLIDAY_LIST.contains(current)) { System.out.println(true); workDays++; } } if (SPECIAL_WORKDAY_LIST.contains(current)) { System.out.println(true); workDays++; } startCal.add(Calendar.DATE, 1); } return workDays; } }

把方法定义在工具类中,带上@Component注解,在SpringBoot项目中,项目启动时会扫描到这个类,同时创建其实例,随即静态代码块就会执行获取到节假日和调休的数据,数据存储在两个静态的List集合中,只要服务不停,整个生命周期内都有效,这样就免去了手动维护的工作



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有