Java如何判断当前日期是否是节假日

在Java中判断当前日期是否是节假日,需要获取节假日的日期信息,并进行比对。一种常见的方式是使用公共的节假日数据源,比如国家法定的节假日信息或者自定义的节假日数据,然后通过代码逻辑判断当前日期是否与节假日日期匹配。本文将介绍一种基于国家法定节假日信息的方式来判断当前日期是否是节假日。

获取节假日数据

首先,我们需要获取节假日的日期信息,这里以中国的法定节假日为例。可以使用一个包含节假日日期的数据源,例如一个JSON文件或者数据库表。下面是一个简化的JSON格式的节假日数据示例:

{
  "2021": {
    "元旦": ["2021-01-01"],
    "春节": ["2021-02-12", "2021-02-13", "2021-02-14", "2021-02-15", "2021-02-16", "2021-02-17", "2021-02-18"],
    "清明节": ["2021-04-04", "2021-04-05", "2021-04-06"],
    "劳动节": ["2021-05-01", "2021-05-02", "2021-05-03"],
    "端午节": ["2021-06-14", "2021-06-15", "2021-06-16"],
    "中秋节": ["2021-09-21", "2021-09-22", "2021-09-23"],
    "国庆节": ["2021-10-01", "2021-10-02", "2021-10-03", "2021-10-04", "2021-10-05", "2021-10-06", "2021-10-07"]
  }
}

在实际应用中,可以根据实际需求从外部数据源中动态获取节假日数据。

判断当前日期是否是节假日

有了节假日数据后,我们可以通过代码逻辑来判断当前日期是否是节假日。这里的思路是将当前日期格式化为特定的字符串,然后从节假日数据中查找匹配的日期。

下面是一个Java方法的示例,用于判断当前日期是否是节假日:

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Map;

public class HolidayChecker {
    private Map<String, Map<String, List<String>>> holidayData;
    
    public HolidayChecker(Map<String, Map<String, List<String>>> holidayData) {
        this.holidayData = holidayData;
    }
    
    public boolean isHoliday(LocalDate date) {
        String year = String.valueOf(date.getYear());
        String formattedDate = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
        
        if (holidayData.containsKey(year)) {
            Map<String, List<String>> yearHolidays = holidayData.get(year);
            
            for (Map.Entry<String, List<String>> entry : yearHolidays.entrySet()) {
                String holidayName = entry.getKey();
                List<String> holidayDates = entry.getValue();
                
                if (holidayDates.contains(formattedDate)) {
                    return true;
                }
            }
        }
        
        return false;
    }
}

在上述代码中,我们定义了一个HolidayChecker类,通过构造函数传入节假日数据。isHoliday方法用于判断给定日期date是否是节假日。方法内部首先根据给定日期的年份获取对应的节假日数据,然后遍历节假日数据,判断给定日期是否属于节假日日期。

使用示例

下面是一个使用示例,演示如何使用HolidayChecker类判断当前日期是否是节假日:

import java.time.LocalDate;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        // 构建节假日数据
        Map<String, Map<String, List<String>>> holidayData = new HashMap<>();
        Map<String, List<String>> yearHolidays = new HashMap<>();
        yearHolidays.put("元旦", List.of("2021-01-01"));
        yearHolidays.put("春节", List.of("2021-02-12", "2021-02-13", "2021-02-14", "2021-02-15", "2021