调用免费API查询全年工作日、周末、法定节假日、节假日调休补班数据

调用免费API查询全年工作日、周末、法定节假日、节假日调休补班数据

前言
  日常开发中,难免会用到判断今天是工作日、周末、法定节假日、节假日调休补班做一些业务处理,例如:仅在上班时间给用户推送消息。本文记录调用免费API查询全年工作日、周末、法定节假日、节假日调休补班数据

API介绍
  https://api.apihubs.cn/holiday/get?size=500&year=2021,查询全年日历(含周末)

这个API是在知乎(https://zhuanlan.zhihu.com/p/343863993)上看到的,官网是这个:http://www.apihubs.cn/#/holiday

查询全年节假日、调休

这个API是在简书(https://www.jianshu.com/p/1e05e72b41fd)上看到的,官网是这个:http://timor.tech/api/holiday


```java
/**
 * 节假日工具类
 */
public class HolidayUtil {

    /**
     * 发送get请求
     */
    private static String get(String url){
        StringBuilder inputLine = new StringBuilder();
        String read;
        try {
            HttpURLConnection urlConnection = (HttpURLConnection) new URL(url).openConnection();
            urlConnection.setReadTimeout(30 * 1000);
            urlConnection.setConnectTimeout(30 * 1000);
            urlConnection.setRequestProperty("Charset", "UTF-8");
            urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36)");
            BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), StandardCharsets.UTF_8));
            while ((read = in.readLine()) != null) {
                inputLine.append(read);
            }
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return inputLine.toString();
    }

    /**
     * 调用免费API查询全年工作日、周末、法定节假日、节假日调休补班数据
     * 1、调用 https://api.apihubs.cn/holiday/get?size=500&year=2021 查询全年日历(含周末)
     * 2、调用 https://timor.tech/api/holiday/year/2021 查询全年节假日、调休
     */
    public static ArrayList<HolidayVo> getAllHolidayByYear(String year) throws IOException {
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
        ArrayList<HolidayVo> holidayVoList = new ArrayList<>();
        HashMap<String,HolidayVo> hashMap = new HashMap<>();


        //查询全年日历包含周末
        String allDayJson = HolidayUtil.get("https://api.apihubs.cn/holiday/get?size=500&year="+year);
        ObjectMapper mapper = new ObjectMapper();
        Map allDayMap = mapper.readValue(allDayJson,Map.class);
        Map allDayData = (Map)allDayMap.get("data");
        List allDayDataList = (List)allDayData.get("list");
        allDayDataList.forEach((value) -> {
            HolidayVo holidayVo = new HolidayVo();

            Map value1 = (Map) value;
            String YEAR = value1.get("year").toString();
            String MONTH = value1.get("month").toString().replace(YEAR,"");
            String DAY = value1.get("date").toString().replace(YEAR+MONTH,"");

            holidayVo.setData(YEAR + "-" + MONTH + "-" + DAY);
            String STATUS = "0";
            String msg = "工作日";
            if("1".equals(value1.get("weekend").toString())){
                STATUS = "1";
                msg = "周末";
            }
            holidayVo.setStatus(STATUS);
            holidayVo.setMsg(msg);

            hashMap.put(holidayVo.getData(),holidayVo);
        });

        //查询全年节假日、调休
        String holidayJson = HolidayUtil.get("https://timor.tech/api/holiday/year/"+year + "/");
        Map holidayMap = mapper.readValue(holidayJson,Map.class);
        LinkedHashMap holidayList = (LinkedHashMap)holidayMap.get("holiday");
        holidayList.forEach((key,value) -> {
            HolidayVo holidayVo = new HolidayVo();

            Map value1 = (Map) value;
            String dateTime = value1.get("date").toString();

            holidayVo.setData(dateTime);
            String STATUS = "2";
            String msg = "法定节假日("+value1.get("name").toString()+")";
            if(value.toString().contains("调休")){
                STATUS = "3";
                msg = "节假日调休补班("+value1.get("target").toString()+")";
            }
            holidayVo.setStatus(STATUS);
            holidayVo.setMsg(msg);

            hashMap.replace(holidayVo.getData(),holidayVo);
        });

        for (String key : hashMap.keySet()) {
            holidayVoList.add(hashMap.get(key));

        }

        //排序
        holidayVoList.sort((a,b)->{
            try {
                return sf.parse(a.getData()).compareTo(sf.parse(b.getData()));
            } catch (ParseException e) {
                e.printStackTrace();
            }
            return 1;
        });

        return holidayVoList;
    }
}
```/**
 * 节假日Vo
 */
@Data
public class HolidayVo {
    private String data;//日期

    private String status;//状态:0工作日/1周末/2法定节假日/3节假日调休补班

    private String msg;//描述
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值