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