Java获取当前是否节假日

3,355 阅读1分钟

在这里插入图片描述

当我们有业务需求的时候,需要判断当前时间是否为节假日有3种方式

  1. Jsoup 爬虫爬取 (万年日历查询 或者 360日历 百度日历)
  2. 自己维护一套日历数据表(成本较高)
  3. 调用开发 api 获取别人维护好的数据

本文采用的是3

api接口地址: timor.tech/api/holiday… 较稳定可靠

在这里插入图片描述

@Component
public class HolidayUtil {

    @Autowired
    private RestTemplateUtil restTemplateUtil;

    @Autowired
    private RedisUtil redisUtil;

    /**
     * 获取是否节假日
     * @return
     */
    public Sting getNowDayHoliday(){
        LocalDate now = LocalDate.now();
        //我们利用redis 将数据存起来
        String key = RedisConstant.HOLIDAY + now;
        if(redisUtil.hasKey(key)){
            return redisUtil.get(key);
        }else{
            String url = "http://timor.tech/api/holiday/info/" + now;
            Map<String, String> headers = new HashMap<>();
            headers.put("Content-Type", "application/json;charset=UTF-8");
            //模拟真实请求
            headers.put("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36");
            ResponseEntity<String> responseEntity = restTemplateUtil.get(url,headers, String.class);
            //json转换
            Map<Object, Object> map = 
            JsonUtil.stringToCollect(responseEntity.getBody());
            if(map.get("code").equals(0)){
                redisUtil.set(key,map.get("type"),86400);
                return map.get("type");
            }else{
                return null;
            }
        }
    }

}

RestTemplateUtil:

 /**
     * 带请求头的GET请求调用方式
     *
     * @param url 请求URL
     * @param headers 请求头参数
     * @param responseType 返回对象类型
     * @param uriVariables URL中的变量,按顺序依次对应
     * @return ResponseEntity 响应对象封装类
     */
    public <T> ResponseEntity<T> get(String url, Map<String, String> headers, Class<T> responseType, Object... uriVariables) {
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setAll(headers);
        return get(url, httpHeaders, responseType, uriVariables);
    }



 /**
     * 带请求头的GET请求调用方式
     *
     * @param url 请求URL
     * @param headers 请求头参数
     * @param responseType 返回对象类型
     * @param uriVariables URL中的变量,按顺序依次对应
     * @return ResponseEntity 响应对象封装类
     */
    public <T> ResponseEntity<T> get(String url, HttpHeaders headers, Class<T> responseType, Object... uriVariables) {
        HttpEntity<?> requestEntity = new HttpEntity<>(headers);
        return exchange(url, HttpMethod.GET, requestEntity, responseType, uriVariables);



/**
     * 通用调用方式
     *
     * @param url 请求URL
     * @param method 请求方法类型
     * @param requestEntity 请求头和请求体封装对象
     * @param responseType 返回对象类型
     * @param uriVariables URL中的变量,按顺序依次对应
     * @return ResponseEntity 响应对象封装类
     */
    public <T> ResponseEntity<T> exchange(String url, HttpMethod method, HttpEntity<?> requestEntity, Class<T> responseType, Object... uriVariables) {
        return restTemplate.exchange(url, method, requestEntity, responseType, uriVariables);
    }
    }

输出

{"code":0,"type":{"type":0,"name":"周二","week":2},"holiday":null}