判断日期是否节假日api

写了个定时任务,需要在节假日才执行,不是节假日就不执行,很显然适用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的字符串就是空

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
判断日期是否是周末很简单,可以使用Java中的Calendar类的get方法获取日期对应的星期几,然后判断是否是周六或周日即可。代码如下: ``` Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); if (dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.SUNDAY) { // 是周末 } ``` 判断日期是否节假日比较复杂,需要获取节假日列表并进行匹配。可以使用第三方的节假日API来实现,或者自己编写代码实现。以下是自己编写代码实现的思路: 1. 获取节假日列表,可以存储在文件中或者数据库中。 2. 根据日期获取对应的年份,然后查询该年份的节假日列表。 3. 判断日期是否节假日列表中,如果在则说明是节假日。 代码如下: ``` // 读取节假日列表,这里以读取文件为例 List<Date> holidayList = new ArrayList<>(); try { BufferedReader reader = new BufferedReader(new FileReader("holiday.txt")); String line; while ((line = reader.readLine()) != null) { holidayList.add(new SimpleDateFormat("yyyy-MM-dd").parse(line)); } reader.close(); } catch (IOException | ParseException e) { e.printStackTrace(); } // 判断日期是否节假日 Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int year = calendar.get(Calendar.YEAR); for (Date holiday : holidayList) { Calendar c = Calendar.getInstance(); c.setTime(holiday); if (c.get(Calendar.YEAR) == year && c.get(Calendar.MONTH) == calendar.get(Calendar.MONTH) && c.get(Calendar.DAY_OF_MONTH) == calendar.get(Calendar.DAY_OF_MONTH)) { // 是节假日 break; } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值