调用百度万年历接口判断输入的日期是否是工作日

由于开发需要,需要写一个判断当前是否是工作日的接口,网上找了很多免费的接口,怕不稳当,也有些不是很正确,所以自己写了调用百度这样的接口来实现,同时做了判断,判断是否需要调休,是否是工作日

调用结果如图:

调用百度万年历接口判断输入的日期是否是工作日_第1张图片

实现代码如下:

package com.thread.demo;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.springframework.util.StringUtils;

import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class JsonTest {

    public static void main(String[] args) throws IOException, ParseException {
        String dateTest = "2020-9-28";
        System.out.println("isWork:"+isWork(dateTest));
    }

/**
     * 根据key值获取json的array数组数据
     * @param param
     * @param arr
     * @return
     */
    public static JSONArray getHoliday(String param, JSONArray arr){
        JSONArray key = null;
        for (Object datum : arr) {
            String data_Str = datum.toString();
            JSONObject data_Json = (JSONObject) JSONObject.parse(data_Str);
            key = data_Json.getJSONArray(param);
        }
        return key;
    }

    public static Boolean isWeekend(String bDate) throws ParseException {
        Boolean isWeekends = false;
        DateFormat format = new SimpleDateFormat("yyyy-M-d");
        Date bdate = format.parse(bDate);
        Calendar cal = Calendar.getInstance();
        cal.setTime(bdate);
        if(cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY || cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY){
            return true;
        } else{
            return isWeekends;
        }
    }


    public static Boolean isWork(String dateInput)throws IOException, ParseException{
        boolean isHoliday = false;
        boolean isVwork = false;
        boolean isWeekend = false;
        String[] args = dateInput.split("-");
        String year = args[0];
        String month = args[1];
        String url = "";

        //创建http请求客户端
        CloseableHttpClient build = HttpClientBuilder.create().build();
        url = "https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?query="+year+"%E5%B9%B4"+month+"%E6%9C%88&resource_id=6018&format=json";
        //发送get请求
        HttpGet httpGet = new HttpGet(url);
        //执行发送Get请求
        CloseableHttpResponse execute = build.execute(httpGet);
        //创建放假list集合存放日期
        List holidayList = new ArrayList<>();
        //创建补班list集合存放日期
        List vworkList = new ArrayList<>();

        //判断响应的状态是否为:200
        if (execute.getStatusLine().getStatusCode()==200){
            //获取响应的实体
            HttpEntity entity = execute.getEntity();
            System.out.println(entity);
            //设置响应编码格式
            String context = EntityUtils.toString(entity, "utf-8");
            //将字符串转换为json格式
            JSONObject parseContext = (JSONObject) JSONObject.parse(context);
            //获取json数据里的data数组
            JSONArray data = parseContext.getJSONArray("data");
            JSONArray holiday = getHoliday("holiday", data);
            JSONArray list = getHoliday("list", (JSONArray) holiday);
            //遍历list
            for (Object o : list) {
                String sql = o.toString();
                JSONObject jsonObject = (JSONObject) JSONObject.parse(sql);
                String date = jsonObject.getString("date");
                String status = jsonObject.getString("status");
                if("1".equals(status)){
                    holidayList.add(date);
                }
                if("2".equals(status)){
                    vworkList.add(date);
                }
            }
            for(int i = 0 ;i <  holidayList.size(); i++){
                if(holidayList.get(i).equals(dateInput)){
                    isHoliday = true;
                }

            }
            for(int i = 0 ;i <  vworkList.size(); i++){
                if(vworkList.get(i).equals(dateInput)){
                    isVwork = true;
                }
            }
            isWeekend = isWeekend(dateInput);

            if(isHoliday){
                return false;
            }else if(isVwork){
                return true;
            }else if(isWeekend){
                return false;
            }else {
                return true;
            }
        }
        return null;
    }

    
}

 

你可能感兴趣的:(Java,百度万年历,节假日,java,1024程序员节)