使用GitHub开源Api调用获取国家法定节假日

public class HolidayUtils {/*** 请求第三方接口的方法** @param url 请求的url* @return*/public static String get(String url, int i) {// 请求urlURL getUrl = null;// 连接HttpURLConnection connection = null;// 输入流BufferedReader reader = null;// 返回结果StringBuilder lines = new StringBuilder();try {// 初始化urlgetUrl = new URL(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 {// 在finally中关闭资源if (reader != null) {try {reader.close();} catch (IOException e) {e.printStackTrace();}}if (connection != null) {connection.disconnect();}}return lines.toString();}/*** 设置尝试次数** @param url* @return*/public static String get(String url) {return get(url, 0);}/*** 获取指定年份的url** @param year 年份* @return*/private static String getPath(String year) {// 源json地址// return "https://raw.githubusercontent.com/NateScarlet/holiday-cn/master/" + year + ".json";// 国内镜像地址// return "https://natescarlet.coding.net/p/github/d/holiday-cn/git/raw/master/" + year + ".json";// cdn地址return "https://cdn.jsdelivr.net/gh/NateScarlet/holiday-cn@master/" + year + ".json";}/*** 获取指定年份的节假日信息** @param year 年份 如:"2022"* @return*/public static JSONArray getHolidayOfYear(String year) {// 获取指定年份的urlString url = getPath(year);// 获取返回结果String json = get(url);// 解析返回结果JSONObject jsonObject = JSONObject.parseObject(json);JSONArray jsonArray = jsonObject.getJSONArray("days");return jsonArray;}/*** 获取指定日期的节假日信息** @param date 日期 如:"2022-04-05"* @return 如果是节假日, 则isOffDay为true, 否则为false*/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()) {// 如果没有找到该日期的节假日信息,则将该日期的"isOffDay"设置为falseresult.put("date", date);result.put("isOffDay", false);}return result;}/*** 判断日期是否节假日的方法** @param date 日期 如:"2022-04-05"*/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);// 如果传入的日期存在于该年的节假日中,则返回对应的节假日信息(true为节假日, false为调休工作日)if (jsonObject.getString("date").equals(date)) {return jsonObject.getBoolean("isOffDay");}}// 如果不存在, 则直接返回false(非节假日)return false;}/*** 获取指定Date的节假日信息** @param date* @return*/public static JSONObject getHolidayOfDate(Date date) {// 将Date格式化为StringSimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");return getHolidayOfDate(sdf.format(date));}/*** 判断指定Date是否节假日** @param date* @return*/public static boolean isHoliday(Date date) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");return isHoliday(sdf.format(date));}/*** 获取从指定日期开始的节假日天数** @param date* @return*/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"));}
}

【Java获取国家法定节假日三种工具类其三】相关推荐

  1. 【Java获取国家法定节假日三种工具类其一】

    最全的时间工具类 开箱即用 public abstract class MyDateUtil {/*** 时区误差*/private static long timeZoneError = 0;/** ...

  2. 【Java获取国家法定节假日三种工具类其二】

    使用实体类返回更加清晰 public class Holiday {private String day;private String name;private boolean work;privat ...

  3. java获取国家法定节假日(不依赖API)

    java获取国家法定节假日, 由此可获取每月第一个工作日和最后一个工作日 (不依赖API,主要是因为API接口不可靠或计费,此工具依赖国务院发布的节假日基础信息进行解析) 本工具仅供参考学习.各类数据 ...

  4. java获取国家法定节假日和周末

    java获取国家法定节假日和周末 package com.lxh.config.utils;import com.alibaba.fastjson.JSONObject; import okhttp3 ...

  5. 【现成工具】java获取国家法定节假日包含指定月份节假日和周末

    首先感谢大佬提供的免费API接口调用,http://timor.tech/api/holiday .该API工具类可以获取到国家法定节假日,此节假日为严格按照国家要求的双休和法定节假日并且包含节假日的 ...

  6. java 获取当前时间的三种方法是什么

    本文主要介绍java获取当前时间的三种方法.这篇文章很详细,有一定的参考价值.有需要的朋友可以参考一下. 总结一些java中获取当前时间的方法. System.currentTimeMillis() ...

  7. java获取反射机制的三种方式

    更多免费教学文章请关注这里 java 获取反射常使用的三种方式: 1.通过new对象实现反射机制 2.通过路径实现反射机制 3.通过类名实现反射机制 通过Object类的getClass方法来获取 使 ...

  8. JAVA获取当前时间的三种方法

    1.java.util.Date day=new Date(); SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:s ...

  9. java 获取随机数字的三种方法

    1 //方法1 (数据类型) 2 //(最小值+Math.random()*(最大值-最小值+1)) 3 // 例: 4 (int)(1+Math.random()*(10-1+1)) //从1到10 ...

最新文章

  1. BERT模型的OneFlow实现
  2. 【Python合集】全面掌握Python基础知识,建议收藏
  3. Visual C++位图操作
  4. centos 7.6安装java_Hadoop的安装
  5. 强制删除tfs未迁入项的两个方法。
  6. Python——编码风格建议
  7. 检测php常量是否存在,php判断变量常量是否存在
  8. SAP License:物料账差异
  9. 多边多面形成体_Nature Comm | 中科院分子植物卓越中心巫永睿团队揭示类胡萝卜素影响玉米硬质胚乳形成的新机制...
  10. AAAI2021 | 最新图神经网络研究进展解读
  11. RHCE课程-RH253Linux服务器架设笔记五-APACHE服务器配置(2)
  12. 计算机英语课堂活动总结,英语活动总结(精选8篇)
  13. matlab 2015 积分,Matlab中如何求解积分?
  14. CSS3动画animation认识和Animate.css的使用
  15. 怎么把独有的qlv格式转换成mp4格式
  16. 怎么给input插入一个图片
  17. MySQL中Invalid default value错误解决方法
  18. 菜鸟初识脚本 and 脚本语言
  19. 达梦8 DCA培训总结
  20. 比菜鸟更进一步(1):Style文件和toolbar的使用

热门文章

  1. Output tensors to a Model must be the output of a TensorFlow `Layer`
  2. 支付 VS 清算 VS 结算
  3. 深入line-height,中线,基线,底线,顶线
  4. Sublime Text 3 快捷实现文件在浏览器中打开
  5. Java并发编程73道面试题及答案 —— 面试稳了 侵立删
  6. C#调用RabbitMQ实现消息队列
  7. 分享一个超nice的数据分析实战案例, “手把手”教学,收藏等于学会
  8. OSChina 周日乱弹 —— 这个野男人是谁
  9. linux firefox体验,Firefox插件 让你在桌面浏览器体验Firefox OS(附安装教程)
  10. 【BFS】lydsy3161 孤舟蓑笠翁