java怎么获取法定节假日

441
2023/8/16 9:09:30
栏目: 编程语言
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

Java本身没有直接获取法定节假日的功能,但可以通过调用第三方的接口或使用日历库来实现。

1. 调用第三方接口:可以使用一些提供法定节假日查询的接口,如国家法定节假日数据接口、万年历API等。你需要先注册并获取API密钥,然后通过HTTP请求调用接口获取相应的节假日数据。

例如,使用国家法定节假日数据接口,可以通过以下代码获取指定日期的节假日信息:

```java
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class HolidayAPI {
   public static void main(String[] args) {
       try {
           String apiKey = "your_api_key";
           String date = "2022-01-01"; // 指定日期
           String url = "http://api.goseek.cn/Tools/holiday?date=" + date;

           URL obj = new URL(url);
           HttpURLConnection con = (HttpURLConnection) obj.openConnection();
           con.setRequestMethod("GET");
           con.setRequestProperty("User-Agent", "Mozilla/5.0");

           int responseCode = con.getResponseCode();
           if (responseCode == HttpURLConnection.HTTP_OK) {
               BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
               String inputLine;
               StringBuilder response = new StringBuilder();

               while ((inputLine = in.readLine()) != null) {
                   response.append(inputLine);
               }
               in.close();

               System.out.println(response.toString());
           } else {
               System.out.println("GET request failed");
           }
       } catch (Exception e) {
           e.printStackTrace();
       }
   }
}
```

2. 使用日历库:Java的`java.util.Calendar`类提供了一些日期计算的功能,可以通过判断指定日期是否为法定节假日来获取节假日信息。但这种方法需要自己维护一份法定节假日的数据。

例如,可以创建一个`HolidayUtil`类来判断指定日期是否为法定节假日:

```java
import java.util.Calendar;
import java.util.Date;

public class HolidayUtil {
   // 判断指定日期是否为法定节假日
   public static boolean isHoliday(Date date) {
       Calendar calendar = Calendar.getInstance();
       calendar.setTime(date);

       int year = calendar.get(Calendar.YEAR);
       int month = calendar.get(Calendar.MONTH) + 1;
       int day = calendar.get(Calendar.DAY_OF_MONTH);

       // 根据自己维护的法定节假日数据进行判断
       if (month == 1 && day == 1) { // 元旦节
           return true;
       } else if (month == 10 && day == 1) { // 国庆节
           return true;
       } else {
           return false;
       }
   }

   public static void main(String[] args) {
       Date date = new Date(); // 指定日期
       boolean isHoliday = isHoliday(date);
       System.out.println(isHoliday);
   }
}
```

以上两种方法都可以根据自己的需求进行扩展和优化,实现更复杂的节假日查询功能。

辰迅云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读: Java线程池的拒绝策略有哪些