日常开发很多场景会需要判断节假日
下面的代码可以用于判断一个给定的日期是否是周末、法定节假日、传统节日或者调休日
其中有使用到hutool的ChineseDate类,使用前记得加上hutool的依赖。
import cn.hutool.core.date.ChineseDate;import java.time.DayOfWeek;import java.time.LocalDate;import java.time.Month;import java.time.format.DateTimeFormatter;import java.util.HashSet;import java.util.Set;public class HolidayChecker { private static final Set PUBLIC_HOLIDAYS = new HashSet<>(); private static final Set SUBSTITUTE_WORKDAYS = new HashSet<>(); private static final String CHINESE_HOLIDAYS = "春节,清明节,端午节,中秋节"; static { // 添加法定节假日到集合中 // 元旦节 PUBLIC_HOLIDAYS.add(LocalDate.of(LocalDate.now().getYear(), Month.JANUARY, 1)); // 国庆节 PUBLIC_HOLIDAYS.add(LocalDate.of(LocalDate.now().getYear(), Month.OCTOBER, 1)); //添加调休日到集合中 SUBSTITUTE_WORKDAYS.add(LocalDate.of(LocalDate.now().getYear(), Month.OCTOBER, 7)); } public static boolean isWeekendOrPublicHoliday(String dateString) { // 将字符串日期转换为LocalDate对象 LocalDate date = LocalDate.parse(dateString, DateTimeFormatter.ofPattern("yyyy-MM-dd")); // 检查日期是否为调休日 if (SUBSTITUTE_WORKDAYS.contains(date)) { return false; } // 检查日期是否为周末(星期六或星期日) if (date.getDayOfWeek() == DayOfWeek.SATURDAY || date.getDayOfWeek() == DayOfWeek.SUNDAY) { return true; } // 检查日期是否为法定节假日 if (PUBLIC_HOLIDAYS.contains(date)) { return true; } // 检查日期是否为传统节日 ChineseDate chineseDate = new ChineseDate(DateUtil.parseDate(dateString)); if (CHINESE_HOLIDAYS.contains(chineseDate.getFestivals())) { return true; } return false; } public static void main(String[] args) { String dateString = "2023-10-01"; // 示例日期字符串 boolean isWeekendOrPublicHoliday = isWeekendOrPublicHoliday(dateString); System.out.println(isWeekendOrPublicHoliday); }}
优化:
1.方法中的所有节假日及调休日期都是在代码中写死的,不便于节假日的维护,可以在数据库中建表并提供接口配合element-ui中的Calendar组件进行维护,这样更便于用户使用
2.方法返回值是布尔类型用来区分节假日和非节假日,可以考虑返回更多信息,例如节日的类型(如"周末"、"法定节假日"、"调休日"或"传统节日")
来源地址:https://blog.csdn.net/qq_47559530/article/details/131941169