JAVA 获取工作日、节假日工具 Lunar

本文介绍如何在Java中准确判断给定日期是否为工作日,避免仅依赖于简化版的节假日数据,特别关注非节假日和非调休情况。通过结合法定假日检查和周末识别,提供了一段实用的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

开源项目地址

https://github.com/6tail/lunar-java

使用很简单,但是好像无法直接通过maven拉包,也可能我们公司网络问题。

参考文档,在github上项目下拉页面底部

http://6tail.cn/calendar/api.html

一般会使用这个,但是这个在我当前发现有个弊端,无法获取非节假日并且非调休的指定日期是否是工作日,没细看源码,应该是为了减少冗余,只维护了节假日以及与节假日调休相关的日期,这个就会导致如果与假期无关的日子就会报空指针异常

所以去除真正的节假日需要两步走

判断是否是法定节假日,判断是否是周末就可以完美解决。上代码

        boolean isWork = true;
		Holiday holiday = HolidayUtil.getHoliday(DateUtil.getCurrentDate());
		if(holiday == null){
			// 获取周几工具类,不再赘述
			int weekDay = DateUtil.getWeek(new Date());
			if(weekDay > 5){
				isWork = false;
			}
		} else {
			isWork = holiday.isWork();
		}

 

LunarCalendar返回农历(阴历)日期的JAR包 根据指定日期计算对应农历日期(这个计算方法是网上找的,最初的作者是谁已经无法考证了,感谢网络资源吧!),本人封装成好用的JAR包后发不出来,供大家免费下载! toString()方法输出阴历日期(例如:癸巳年七月廿) getFullInfo()方法输出包括生肖在内的阴历日期(例如:癸巳年七月廿,生肖:蛇) 构建方法包括以下四种: public LunarCalendar(String year, String month, String date) public LunarCalendar(JComboBox jcYear, JComboBox jcMonth, JComboBox jcDate) public LunarCalendar(int year, int month, int date) public LunarCalendar(Calendar cal)) 使用前两种构建方法时,若文本内容不为数字,getErrorMessage会返回错误信息 方法摘要 java.lang.String getErrorMessage() 返回String类型的错误信息 java.lang.String getFullInfo() 返回String类型的详细阴历信息(例如:癸巳年七月廿,生肖:蛇) java.lang.String getLunarAnimal() 返回String类型的生肖(例如:蛇) java.lang.String getLunarDate() 返回String类型的阴历日期(例如:廿) java.lang.String getLunarMonth() 返回String类型的阴历月份(例如:七) java.lang.String getLunarYear() 返回String类型的阴历年份(天干地支,例如:癸巳) java.lang.String toString() 返回String类型的阴历日期(例如:癸巳年七月廿) JAR包名称:LunarCalendar version 1.0 8/26/2013 作者:Roy, Liu royliu90@live.cn
Java中可以通过判断日期是周末还是法定节假日来判断当前日期是工作日还是节假日。 判断日期是周末的方法: ```java public static boolean isWeekend(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); int week = cal.get(Calendar.DAY_OF_WEEK) - 1; return week == 6 || week == 0; // 周六和周日返回true,其他返回false } ``` 判断日期是法定节假日的方法: ```java public static boolean isHoliday(Date date) { // 判断是否是元旦节 if (isSameDate(date, new Date(date.getYear(), 0, 1))) { return true; } // 判断是否是春节 int year = getYear(date); int springFestivalDate = LunarCalendar.getSpringFestivalDate(year); if (isSameDate(date, LunarCalendar.getSolarDate(year, 0, springFestivalDate))) { return true; } // 判断是否是清明节 if (isSameDate(date, LunarCalendar.getSolarDate(year, 3, LunarCalendar.getQingMingDate(year)))) { return true; } // 判断是否是劳动节 if (isSameDate(date, new Date(date.getYear(), 4, 1)) || isSameDate(date, new Date(date.getYear(), 4, 2)) || isSameDate(date, new Date(date.getYear(), 4, 3))) { return true; } // 判断是否是端午节 if (isSameDate(date, LunarCalendar.getSolarDate(year, 5, LunarCalendar.getDuanWuDate(year)))) { return true; } // 判断是否是中秋节 if (isSameDate(date, LunarCalendar.getSolarDate(year, 8, LunarCalendar.getZhongQiuDate(year)))) { return true; } // 判断是否是国庆节 if (isSameDate(date, new Date(date.getYear(), 9, 1)) || isSameDate(date, new Date(date.getYear(), 9, 2)) || isSameDate(date, new Date(date.getYear(), 9, 3))) { return true; } return false; } public static boolean isSameDate(Date date1, Date date2) { return date1.getYear() == date2.getYear() && date1.getMonth() == date2.getMonth() && date1.getDate() == date2.getDate(); } public static int getYear(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); return cal.get(Calendar.YEAR); } ``` 以上代码中,`LunarCalendar`类是一个农历日历工具类,可用于计算农历节日的日期。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值