Java 节假日查询工具

一、工具类

/**
 * 查询节假日
 */
public class VacationUtil {

    private static final Map<String,String> V_STATUS_MAP = new HashMap<>(){{
        put("0","工作日");
        put("1","休息日");
        put("2","节假日");
    }};
    private static final Map<String,String> DATE_TYPE_MAP = new HashMap<>(){{
        put("4","yyyy");
        put("6","yyyyMM");
        put("8","yyyyMMdd");
    }};

    /**
     * 获取节假日<br/>
     * 状态: 工作日对应结果为 0, 休息日对应结果为 1, 节假日对应的结果为 2<br/>
     * api:https://www.kancloud.cn/xiaoggvip/holiday_vip<br/>
     * @param apikey 密钥
     * @param date 查询日期,格式[年:yyyy,月:yyyyMM,日:yyyyMMdd]
     * @return 年、月查询结果返回 Map[key:日期,value:状态]<br/>
     * 日查询返回状态字符串<br/>
     */
    public static <T> T getVacationData(String apikey,String date){
        if(!isLegalDate(date)){
            throw new RuntimeException("Illegitimate date");
        }
        Map<String,String> map = new HashMap<>();
        String res="";
        try {
            res = HttpUtil.get("http://tool.bitefu.net/jiari/vip.php?d="+date+"&apikey="+apikey+"&type=3&backtype=1");
        }catch (Exception e){
            throw new RuntimeException("getVacationData request exception");
        }

        if(res == null && res == ""){
            return (T)map;
        }

        JSONObject jsonObject = JSONObject.parseObject(res);
        if("0".equals(jsonObject.getString("status"))){
            throw new RuntimeException(jsonObject.getString("msg"));
        }
        if(date.length()==8){
            return (T)jsonObject.getString("data");
        }

        map = (Map<String,String>)jsonObject.get("data");

        return (T)map;

    }

    /**
     * 判断日期是否是一个合法的日期
     * @param date
     * @return
     */
    private static boolean isLegalDate(String date){
        if(date == null || (date.length() != 4 && date.length() != 6 && date.length() != 8)){
            return false;
        }

        SimpleDateFormat sdf = new SimpleDateFormat(DATE_TYPE_MAP.get(String.valueOf(date.length())));
        sdf.setLenient(false); 

        try {
            sdf.parse(date);
        } catch (ParseException e) {
            return false;
        }
        return true;
    }

    /**
     * 节假日状态转中文
     * @param code 节假日状态
     * @return 节假日状态对应中文
     */
    public static String convert(String code){
        return V_STATUS_MAP.get(code);
    }
}

二、测试

public static void main(String[] args) {
    Map<String,String> res1 = VacationUtil.getVacationData("123456","202408");
    System.out.println(res1);
    String res2 = VacationUtil.getVacationData("123456","20240827");
    System.out.println(res2);
}
{"20240814":0,"20240813":0,"20240812":0,"20240811":1,"20240818":1,"20240817":1,"20240816":0,"20240815":0,"20240810":1,"20240831":1,"20240830":0,"20240819":0,"20240803":1,"20240825":1,"20240802":0,"20240824":1,"20240801":0,"20240823":0,"20240822":0,"20240807":0,"20240829":0,"20240806":0,"20240828":0,"20240805":0,"20240827":0,"20240804":1,"20240826":0,"20240821":0,"20240820":0,"20240809":0,"20240808":0}
0

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值