由来

节假日判断工具类:大厂接口要收费,小厂接口怕不稳定,索性自己写一个吧。

软件架构

spring boot,jdk1.8

原理:通过文本文件,维护每一年的假节日和调休日期。示例见/years/2022.txt当国务院发布新一年的节假日规划后维护到该目录下。维护还是比较简单的,三五分钟即可完成。

核心代码逻辑

判断某一天是否为工作日:

1、如果为法定节假日:false

2、如果为法定调休日:true

3、如果为周末:false,否则true
代码

package com.hanmanyi.util;import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;/*** 节假日判断工具类* 做这个工具的缘由:大厂接口要收费,小长接口怕不稳定,索性自己写一个吧。* * @author hanmanyi**/
public class WeekdayUtil {static Map<String,Object> config = new HashMap<String,Object>();/*** 初始化节假日配置*/static {//节假日存储路径,文件需以YYYY.txt命名String fileFolder = "D:\\eclipse-workspace\\weekday-util\\years";File ff =  new File(fileFolder);File[] flist = ff.listFiles();if(flist != null && flist.length>0) {for (int i = 0; i < flist.length; i++) {File f = flist[i];Map<String,Object> year = new HashMap<>();FilesUtils.readAll2Conig(f.getAbsolutePath(),"UTF-8",year);//初始化节假日设置config.put(f.getName().replace(".txt", ""), year);}}}/*** 是否为工作日* 1、如果为节假日:false* 2、如果为调休日:true* 3、如果为周末:false,否则true* @param date 形如“yyyy-MM-dd”* @return msg:接口返回消息,type:节假日/调休/周末/工作日,isWeekDay:工作日/调休-true,节假日/周末-false*/@SuppressWarnings("unchecked")public static Map<String,Object> isWeekday(String date) {Map<String,Object> ret = new HashMap<>();boolean isWeekDay = true;String type = "";String msg = "";//校验格式if(date.length()<10 || date.indexOf("-")<0) {msg = "请检查参数格式是否正确(yyyy-MM-dd)";ret.put("isWeekDay", isWeekDay);ret.put("type", type);ret.put("msg", msg);return  ret;}Set<String> yearSet = config.keySet();String year = date.substring(0, 4);String mmdd = date.substring(5);if(!yearSet.contains(year)) {msg = "抱歉,还未导入该年度的节假日安排,请联系员导入";ret.put("isWeekDay", isWeekDay);ret.put("type", type);ret.put("msg", msg);return  ret;}Map<String,Object> yearConifg = (Map<String, Object>) config.get(year);//是否为节假日List<String> holidayList = (List<String>) yearConifg.get("holidayList");if(holidayList != null && holidayList.size()>0) {for (int i = 0; i < holidayList.size(); i++) {String holiday = holidayList.get(i);String start = holiday.split("~")[0];String end = holiday.split("~")[1];if(mmdd.compareTo(start)>=0 && end.compareTo(mmdd)>=0) {isWeekDay = false;type = "节假日";msg = "接口调用成功";ret.put("isWeekDay", isWeekDay);ret.put("type", type);ret.put("msg", msg);return  ret;}}}//是否为调休日List<String> weekdayList = (List<String>) yearConifg.get("weekdayList");for (int i = 0; i < weekdayList.size(); i++) {String weekday = weekdayList.get(i);if(mmdd.compareTo(weekday)==0) {isWeekDay = true;type = "调休";msg = "接口调用成功";ret.put("isWeekDay", isWeekDay);ret.put("type", type);ret.put("msg", msg);return  ret;}}//是否为周末boolean isWeekend = DateUtilsHmy.isWeeks(DateUtilsHmy.str2Date(date, DateUtilsHmy.yyyyMMddFormat));if(isWeekend) {isWeekDay = false;type = "周末";msg = "接口调用成功";ret.put("isWeekDay", isWeekDay);ret.put("type", type);ret.put("msg", msg);return  ret;}ret.put("isWeekDay", true);ret.put("type", "工作日");ret.put("msg", "接口调用成功");return  ret;}public static void main(String[] args) {System.out.println(isWeekday("2022-10-08"));}
}

使用说明

示例代码:执行WeekdayUtil的main方法即可
执行结果:

代码

节假日工具类

配置文件示例在这里:

节假日判断工具(Java)相关推荐

  1. php 正则车架号,正则判断工具类 - 我的开源中国 - OSCHINA - 中文开源技术交流社区...

    package com.gulf.utils; import java.text.ParseException; import java.text.SimpleDateFormat; /** * 正则 ...

  2. 连接linux工具Mtr,mtr命令_Linux mtr命令使用详解:网络连通性判断工具

    1.Mtr介绍 mtr是Linux中有一个非常棒的网络连通性判断工具,它结合了ping, traceroute,nslookup 的相关特性. 安装mtr工具 apt-get install mtr ...

  3. 水仙花数的判断(JAVA)

    水仙花数(JAVA) 水仙花数的判断(JAVA) 水仙花数的判断(JAVA) 用户输入一个数,判断是否是"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字 ...

  4. 地图下载器工具-Java

    地图下载器工具-Java 瓦片下载 要点1 使用瓦片的访问地址直接下载瓦片 主要用到的是HttpURLConnection去访问,为了避免被封杀ip,设置了两个请求参数referer,User-Age ...

  5. 怎样判断一个java技术人的技术水平?

    怎样判断一个java技术人的技术水平? 1.要判断一个java技术员水平,首先要看经验. 原因就是java是一个开源语言,各色各样的框架只要有人想得到,或者别的语言出现过,都有可能在java里出现,经 ...

  6. java画笔能画girl图吗_小巧的国产JAVA特效制作工具?Java Girl

    小巧的国产JAVA特效制作工具?Java Girl 作者:未知    文章来源:www.jspcn.net 发布日期:2005年01月19日 在推出gifgirl后不久,任毅的又一免费软件呼吸小秘书之 ...

  7. linux 查看域名连通性,网络连通性判断工具mtr命令

    前言 不管是做网络管理还是做系统运维,都会出现一些网络链路问题,大多数人都知道PING命令,可以简单的测试网络的连通性,但是却无法确定是在哪里出现了问题,有些人就会用tracert命令来查看途经路由, ...

  8. java节假日算法_「国家法定节假日」java 国家法定节假日和双休日判断工具类 - seo实验室...

    国家法定节假日 package com.newland.dateutil; import java.text.ParseException; import java.text.simpledatefo ...

  9. java 国家法定节假日和双休日判断工具类

    package com.date.dateutil;import java.text.ParseException; import java.text.SimpleDateFormat; import ...

最新文章

  1. python函数中的两个坑(面试经常有)
  2. 通过示例休眠–第2部分(DetachedCriteria)
  3. 面试官面试前端_如何面试面试官
  4. C++中未初始化的bool值的问题
  5. CSS中给表格的第一列及最后一列设置不同的样式
  6. 为你的企业建立竞争情报系统 (转)
  7. 戴建钊 201521123023《Java程序设计》第2周学习总结
  8. python爬虫批量下载图片
  9. mysql给所有表添加字段
  10. 【FastAPI 学习十二】定时任务篇 (移步博客园或个人网站 无广告,界面清爽整洁)
  11. arcgis10.2以上版本转换测量队节点所在TXT为所需格式(arctoolbox-samples-features-creat featrure from text file所需要的面格式)
  12. android 怎么刷新view,android – 如何在ViewPager中刷新当前视图
  13. 用php调用接口api
  14. ubuntu系统修改分辨率为2560*1440(2k,16:9)
  15. 新概念1、2英语学习计划
  16. 动态规划经典例题-国王的金矿问题
  17. 有人给你发了匿名短信,一封云来信,一封来信,匿名信
  18. 传奇游戏PC和手机版宣传页模板原版Flash动态炫酷
  19. Replicated和RepNotify
  20. AppCode 2022Improves compatibility

热门文章

  1. Real-Time Rendering Chapter 1~6 读书笔记
  2. 1003【顺序结构】A+B 问题
  3. 【MWC 2022观察】华为绿色智简全光网:让联接释放数字化转型新动能
  4. HttpClient 4.2.3 (GA) 这些名字里面都有GA,GA代表什么意思啊?
  5. 今年双旦期间简直人品爆棚,晒晒我抽中的趣享付趣号卡
  6. [EXCEL] 宏的录制、调用和删除
  7. 【Qt Quick】零基础入门系列之安装与卸载(一)
  8. virtualbox虚拟机识别U盘的详细教程
  9. CDRouter IPv6 Test Case
  10. SWITCH 和ROUTE的故事(来自Csico论坛)