Java中获取节假日日期

话不多说,先上代码

怎么获取节假日

/**
     * 获取节假日 并保存到数据库中
     * @return
     */
    public int getHoliday(){
        
        HolidayClass hc = new HolidayClass();
        List<String> list = new ArrayList<>(); 
        Calendar a=Calendar.getInstance();
        int httpArg = Integer.valueOf(a.get(Calendar.YEAR)); //得到当前年份 
        list.add(httpArg+"");
        int month = Integer.valueOf(a.get(Calendar.MONTH)+1); //得到当前月份 
        
        //暂定12月可以更新下一年日历
        if(month==12){
            httpArg +=1;list.add(httpArg+"");
        }
        for (String s : list) { //遍历年
            int num = hc.DELETE(s);//删除当前年数据
            if(num<0){
                return -1;//"数据删除失败!"
            }
            String json = request(s);
            Map<String, Object> map = json1Map(json);
            for (Map.Entry<String, Object> map1 : map.entrySet()) {
                //System.out.println(map1.getValue()+"*"+map1.getKey());
                String JJRBH = map1.getValue().toString();
                String date1 = map1.getKey();
                String DATE = httpArg+"-"+date1.substring(0,2)+"-"+date1.substring(2);
                int num1 = hc.SaveHoliday(s ,JJRBH ,DATE);
                if(num1<0){
                    return -2;//"数据更新失败!"
                }
            }
        }
        return 1;//"更新成功!"
    }


    // 打开连接获取指定年份节假日
    public String request(String httpArg) {
        String httpUrl = "http://tool.bitefu.net/jiari/vip.php";// 为他人开发的网上接口,可百度进行查阅具体说明
        BufferedReader reader = null;
        String result = null;
        StringBuffer sbf = new StringBuffer();
        httpUrl = httpUrl + "?d=" + httpArg + "&type=0&apikey=123456";//直接使用就可以

        try {
            URL url = new URL(httpUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            connection.connect();
            InputStream is = connection.getInputStream();
            reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
            String strRead = null;
            while ((strRead = reader.readLine()) != null) {
                sbf.append(strRead);
                sbf.append("\r\n");
            }
            reader.close();
            result = sbf.toString();
            System.out.println("rsList===" + result);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

 

    public Map<String, Object> json1Map(String jsonStr) {
        Map<String, Object> map = new HashMap<>();
        if (jsonStr != null && !"".equals(jsonStr)) {
            // 最外层解析
            JSONObject json = JSONObject.fromObject(jsonStr);
            for (Object k : json.keySet()) {
                Object v = json.get(k);
                // 如果内层还是数组的话,继续解析
                if (v instanceof JSONObject) {// 走的这条路
                    map.clear();
                    //System.out.println("第二次json字符串");
                    JSONObject child = (JSONObject) v;
                    for (Object stk : child.keySet()) {
                        Object value = child.get(stk);
                        //System.out.println("value===" + value);
                        if (value instanceof JSONObject) {
                            map.clear();
                            //System.out.println("第三次json字符串");
                            JSONObject cc = (JSONObject) value;
                            for (Object ss : cc.keySet()) {
                                Object vv = cc.get(ss);
                                //System.out.println("vvv===" + vv);
                                map.put(ss.toString(), vv.toString());
                            }
                        } else {
                            map.put(stk.toString(), value.toString());
                        }
                    }
                } else {
                    map.put(k.toString(), v);
                }
            }
            return map;
        } else {
            return null;
        }
    }

以上就是基本代码,可以参考,有问题也请大家多多指教。

应用场景主要用于请假,计算工作日等。具体问题具体分析。

唯一不足的就是需要更新数据库,获取到节假日,这一操作可能需要手动进行,或者定时每月执行一次。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值