日常开发很多场景会需要判断节假日
下面的代码可以用于判断一个给定的日期是否是周末、法定节假日、传统节日或者调休日
其中有使用到hutool的ChineseDate类,使用前记得加上hutool的依赖。文章来源:https://uudwc.com/A/R6323
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;
/**
* 判断节假日
* @author HJQQQ
* @title HolidayChecker
* @create 2023/7/26
*/
public class HolidayChecker {
private static final Set<LocalDate> PUBLIC_HOLIDAYS = new HashSet<>();
private static final Set<LocalDate> 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://uudwc.com/A/R6323