使用GitHub开源Api调用获取国家法定节假日
public class HolidayUtils {
public static String get(String url, int i) {
URL getUrl = null;
HttpURLConnection connection = null;
BufferedReader reader = null;
StringBuilder lines = new StringBuilder();
try {
getUrl = new URL(url);
connection = (HttpURLConnection) getUrl.openConnection();
connection.connect();
reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));
String line = "";
while ((line = reader.readLine()) != null) {
lines.append(line);
}
} catch (IOException e) {
e.printStackTrace();
if (i < 2) {
i++;
try {
System.out.println("第" + i + "次获取失败, 尝试重新请求");
Thread.sleep(3000);
return get(url, i);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
} else {
System.out.println("获取失败, 请检查网络或稍后重试");
}
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (connection != null) {
connection.disconnect();
}
}
return lines.toString();
}
public static String get(String url) {
return get(url, 0);
}
private static String getPath(String year) {
return "https://cdn.jsdelivr.net/gh/NateScarlet/holiday-cn@master/" + year + ".json";
}
public static JSONArray getHolidayOfYear(String year) {
String url = getPath(year);
String json = get(url);
JSONObject jsonObject = JSONObject.parseObject(json);
JSONArray jsonArray = jsonObject.getJSONArray("days");
return jsonArray;
}
public static JSONObject getHolidayOfDate(String date) {
JSONArray jsonArray = getHolidayOfYear(date.substring(0, 4));
JSONObject result = new JSONObject();
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
if (jsonObject.getString("date").equals(date)) {
result = jsonObject;
}
}
if (result.isEmpty()) {
result.put("date", date);
result.put("isOffDay", false);
}
return result;
}
public static boolean isHoliday(String date) {
JSONArray jsonArray = getHolidayOfYear(date.substring(0, 4));
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
if (jsonObject.getString("date").equals(date)) {
return jsonObject.getBoolean("isOffDay");
}
}
return false;
}
public static JSONObject getHolidayOfDate(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return getHolidayOfDate(sdf.format(date));
}
public static boolean isHoliday(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return isHoliday(sdf.format(date));
}
public static int holidayAfterDate(String date, SimpleDateFormat sdf) {
Calendar calendar = Calendar.getInstance();
JSONArray holidayOfYear = getHolidayOfYear(date.substring(0, 4));
int days = 0;
try {
calendar.setTime(sdf.parse(date));
for (int i = 0; i < holidayOfYear.size(); i++) {
JSONObject jsonObject = holidayOfYear.getJSONObject(i);
if (jsonObject.getString("date").equals(date) && jsonObject.getBoolean("isOffDay")) {
days++;
calendar.add(Calendar.DATE, 1);
date = sdf.format(calendar.getTime());
}
}
} catch (ParseException e) {
e.printStackTrace();
}
return days;
}
public static int holidayAfterDate(String date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return holidayAfterDate(date, sdf);
}
public static int holidayAfterDate(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return holidayAfterDate(sdf.format(date), sdf);
}
public static void main(String[] args) {
System.out.println("2022年的节假日: " + getHolidayOfYear("2022"));
System.out.println("节假日的信息: " + getHolidayOfDate("2022-04-05"));
System.out.println("节假日调休工作日: " + getHolidayOfDate("2022-04-02"));
System.out.println("非节假日的信息: " + getHolidayOfDate("2022-04-07"));
System.out.println("判断一个节假日: " + isHoliday("2022-04-05"));
System.out.println("判断一个非节假日: " + isHoliday("2022-04-07"));
System.out.println("自一个节假日起的节假日天数: " + holidayAfterDate("2022-04-04"));
System.out.println("自非节假日起的节假日天数: " + holidayAfterDate("2022-04-06"));
}
}