Java判断节假日

 日常开发很多场景会需要判断节假日

下面的代码可以用于判断一个给定的日期是否是周末、法定节假日、传统节日或者调休日
其中有使用到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;

/**
 * 判断节假日
 * @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

原文地址:https://blog.csdn.net/qq_47559530/article/details/131941169

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

h
上一篇 2023年09月24日 00:05
下一篇 2023年09月24日 00:06