栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

节假日判断工具(Java)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

节假日判断工具(Java)

由来

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

软件架构

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;


public class WeekdayUtil {
	
	static Map config = new HashMap();
	
	
	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 year = new HashMap<>();
				FilesUtils.readAll2Conig(f.getAbsolutePath(),"UTF-8",year);//初始化节假日设置
				config.put(f.getName().replace(".txt", ""), year);
			}
		}
	}
	
	
	@SuppressWarnings("unchecked")
	public static Map isWeekday(String date) {
		Map 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 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 yearConifg = (Map) config.get(year);
		
		//是否为节假日
		List holidayList = (List) 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 weekdayList = (List) 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方法即可
执行结果:

代码

节假日工具类

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/925180.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号