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

时间:2024-03-11 21:13:26

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

  • 调用api获取 所需maven配置(每次使用前跑一下api 看是否失效,相对简单一些不需要百度查当前年份的节假日和补班日期)

            <!-- fastjson -->
    <dependency>
               <groupId>com.alibaba</groupId>
               <artifactId>fastjson</artifactId>
               <version>1.2.47</version>
           </dependency>
           <!-- okhttp -->
           <dependency>
               <groupId>com.squareup.okhttp</groupId>
               <artifactId>okhttp</artifactId>
               <version>3.10.0</version>
           </dependency>

     

                         
    int year = 2021;
           int month = 0;
    /**
        * java获取国家法定节假日和周末
        *
        * @param year
        * @param month
        * @return
        */
       public static Set<String> JJR(int year, int month) {
           //获取所有的周末
           Set<String> monthWekDay = getMonthWekDay(year, month);
           //http://timor.tech/api/holiday api文档地址
           Map jjr = getJjr(year, month + 1);
           Integer code = (Integer) jjr.get("code");
           if (code != 0) {
               return monthWekDay;
          }
           Map<String, Map<String, Object>> holiday = (Map<String, Map<String, Object>>) jjr.get("holiday");
           Set<String> strings = holiday.keySet();
           for (String str : strings) {
               Map<String, Object> stringObjectMap = holiday.get(str);
               Integer wage = (Integer) stringObjectMap.get("wage");
               String date = (String) stringObjectMap.get("date");
               //筛选掉补班
               if (wage.equals(1)) {
                   monthWekDay.remove(date);
              } else {
                   monthWekDay.add(date);
              }
          }
           return monthWekDay;
      }

       /**
        * 获取节假日不含周末
        *
        * @param year
        * @param month
        * @return
        */
       private static Map getJjr(int year, int month) {
           String url = "http://timor.tech/api/holiday/year/";
           OkHttpClient client = new OkHttpClient();
           Response response;
           //解密数据
           String rsa = null;
           Request request = new Request.Builder()
                  .url(url)
                  .get()
                  .addHeader("Content-Type", "application/x-www-form-urlencoded")
                  .build();
           try {
               response = client.newCall(request).execute();
               rsa = response.body().string();
          } catch (IOException e) {
               e.printStackTrace();
          }
           return JSONObject.parseObject(rsa, Map.class);
      }

       /**
        * 获取周末 月从0开始
        *
        * @param year
        * @param month
        * @return
        */
       public static Set<String> getMonthWekDay(int year, int month) {
           Set<String> dateList=new HashSet<String>();
           SimpleDateFormat simdf = new SimpleDateFormat("yyyy-MM-dd");
           Calendar calendar = new GregorianCalendar(year, month, 1);
           int i = 1;
           while (calendar.get(Calendar.YEAR) < year + 1) {
               calendar.set(Calendar.WEEK_OF_YEAR, i++);
               calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
               if (calendar.get(Calendar.YEAR) == year) {
                   System.out.println("周日:"+simdf.format(calendar.getTime()));
                   dateList.add(simdf.format(calendar.getTime()));
              }
               calendar.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
               if (calendar.get(Calendar.YEAR) == year) {
                   System.out.println("周六:"+simdf.format(calendar.getTime()));
                   dateList.add(simdf.format(calendar.getTime()));
              }
          }
           return dateList;
      }

 

 

 

  • 需要百度查询当前年份的节假日和补班日 手动维护(相对于上面的复杂一些 但是稳定)

        int year = 2021;    
    /**
        * 节假日和补班写死得获取国家法定节假日和周末
        * @param year
        * @return
        */
       public Set<String> getWekDay(int year){
           //计算得到一年所有的周六周日存入set集合
           Set<String> dateList=new HashSet<String>();
           SimpleDateFormat simdf = new SimpleDateFormat("yyyy-MM-dd");
           Calendar calendar = new GregorianCalendar(year, 0, 1);
           int i = 1;
           while (calendar.get(Calendar.YEAR) < year + 1) {
               calendar.set(Calendar.WEEK_OF_YEAR, i++);
               calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
               if (calendar.get(Calendar.YEAR) == year) {
                   //System.out.println("周日:"+simdf.format(calendar.getTime()));
                   dateList.add(simdf.format(calendar.getTime()));
              }
               calendar.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
               if (calendar.get(Calendar.YEAR) == year) {
                   //System.out.println("周六:"+simdf.format(calendar.getTime()));
                   dateList.add(simdf.format(calendar.getTime()));
              }
          }
           //手动维护****年的法定节假日
           List<String> list = new ArrayList<String>();
           //元旦
           list.add("2021-01-01");
           list.add("2021-01-02");
           list.add("2021-01-03");
           //春节
           list.add("2021-02-11");
           list.add("2021-02-12");
           list.add("2021-02-13");
           list.add("2021-02-14");
           list.add("2021-02-15");
           list.add("2021-02-16");
           list.add("2021-02-17");
           //清明节
           list.add("2021-04-03");
           list.add("2021-04-04");
           list.add("2021-04-05");
           //劳动节
           list.add("2021-05-01");
           list.add("2021-05-02");
           list.add("2021-05-03");
           list.add("2021-05-04");
           list.add("2021-05-05");
           //端午节
           list.add("2021-06-12");
           list.add("2021-06-13");
           list.add("2021-06-14");
           //中秋节
           list.add("2021-09-19");
           list.add("2021-09-20");
           list.add("2021-09-21");
           //国庆节
           list.add("2021-10-01");
           list.add("2021-10-02");
           list.add("2021-10-03");
           list.add("2021-10-04");
           list.add("2021-10-05");
           list.add("2021-10-06");
           list.add("2021-10-07");
           dateList.addAll(list);
           //手动维护****年的法定节假日的调休上班工作日
           List<String> listRemove = new ArrayList<String>();
           //元旦
           //春节
           listRemove.add("2021-02-07");
           listRemove.add("2021-02-20");
           //清明节
           //劳动节
           listRemove.add("2021-04-25");
           listRemove.add("2021-05-08");
           //端午节
           //中秋节
           listRemove.add("2021-09-18");
           //国庆节
           listRemove.add("2021-09-26");
           listRemove.add("2021-10-09");
           dateList.removeAll(listRemove);
           
           return dateList;
      }

     

  •