欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

判断日期是否节假日api

程序员文章站 2022-05-16 18:34:11
...

写了个定时任务,需要在节假日才执行,不是节假日就不执行,很显然适用cron表达式是无法单独完成的。这里用到了聚合数据api,需要注册一个开发账号,这个比较简单,就不贴出来了。

直接看代码:

    /**
     * 接口请求成功code值
     */
    private static final String SUCCESS_CODE = "Success";
    /**
     * 获取日期信息
     */
    private static final String GET_URL = "http://v.juhe.cn/calendar/day?key=11111113dcf96fdde94e21a193dfe5fe&date=";

    /**
     * 判断日期是否为节假日
     *
     * @param date
     * @return
     */
    public static boolean isHoliday(Date date) {
        JSONObject jsonObject = JSONObject.parseObject(HttpRequestUtil.sendGet(GET_URL + handlerDate(date)));
        System.out.println(jsonObject.toString());
        if (SUCCESS_CODE.equals(jsonObject.get("reason").toString())) {
            //拿到第一层result
            JSONObject result = JSONObject.parseObject(jsonObject.get("result").toString());
            //拿出数据层data
            JSONObject data = JSONObject.parseObject(result.get("data").toString());
            //如果holiday不为空并且 holiday有值 代表是节假日
            return StrUtil.isNotEmpty(data.get("holiday").toString());
        } else {
            throw new MyException("获取节假日接口出错:" + jsonObject.toJSONString());
        }
    }



    /**
     * 将日期2021-03-01
     * 转为2021-3-1
     *
     * @param date
     * @return
     */
    private static String handlerDate(Date date) {
        String dateStr = DateUtil.format(date, MyDateUtil.YYYY_MM_DD);
        StringBuilder stringBuilder = new StringBuilder();
        String[] array = dateStr.split("-");
        for (int i = 0; i < array.length; i++) {
            if (i + 1 == array.length) {
                stringBuilder.append(Integer.parseInt(array[i]));
            } else {
                stringBuilder.append(Integer.parseInt(array[i])).append("-");
            }
        }
        return stringBuilder.toString();
    }

传入的日期如果是节假日,那么获取holiday的字符串就不为空,如果传入的非节假日,获取holiday的字符串就是空