zoukankan      html  css  js  c++  java
  • 日期顺时,自动跳过节假日

    在开发的时候客户提了一个需求,要求处理人/日期这一栏的日期是当天日期的后俩天日期并且自动跳过节假日,
    这个我知道的有三种做法,其实是一种,细分成三小类
    1:创建excel表格,记录该年节假日日期,然后获取目标日期进行比较,这个方法的缺点极其明显,需要比较,需要记录每年的日期,明显效率低;
    2:创建数据,将目标日期通过SQL查询,类似第一种,但是比第一种优异一些,但仍是需要耗费资源和时间;
    3:利用第三方接口,通过接口api来判断这一天是不是节假日,比较推荐这种方式;
    在寻找第三方接口的时候找到以下几个接口,但是我能用的就只有红色标注的接口(第五个),其他的返回结果都是错误的:

    // String httpUrl = "https://www.juhe.cn/docs/api/id/177";
    //String httpUrl = "http://api.goseek.cn/Tools/holiday";
    // String httpUrl = "http://www.easybots.cn/api/holiday.php";
    // String httpUrl = "http://www.easybots.cn/holiday_api.net";
    //String httpUrl = "http://tool.bitefu.net/jiari/"; //可以试试

    下面开始上代码
    第三方接口判断节假日格式
    httpUrl = "http://tool.bitefu.net/jiari/?d=年月日; 工作日返回0,双休日返回1,节日返回2

    /*
      判断是否是节假日,返回String类型,参数,第三接口api(String类型),日期(String类型(格式年月日))
    */
    public static String getHolidays(String httpUrl, String httpArg) {
    BufferedReader reader = null;
    String result = null;
    StringBuffer sbf = new StringBuffer();
    httpUrl = httpUrl + "?d=" + httpArg;
    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(" ");
    }
    reader.close();
    result = sbf.toString();
    } catch (Exception e) {
    e.printStackTrace();
    }
    return result;
    }

    public static void main(String[] args) throws UnsupportedEncodingException {
    Calendar c = Calendar.getInstance();
    SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
    c.add(Calendar.DATE, 2);
    String twoDaysLater = df.format(c.getTime());//获取俩天后格式为年月日的日期
    String httpUrl = "http://tool.bitefu.net/jiari/"; //可以试试
    String result = getHolidays(httpUrl, twoDaysLater);
    System.out.println("result=" + result + "result的长度=" + result.length());
    System.out.println("0".length());
      /*
        此处特别解释,为什么会有对字符长度的输出,因为,虽然getHolidays方法获取的结果是0,1,2
        但是却不能直接equals比较,因为getHolidays返回的结果字符长度是3,因为该方法输出的结果
        后面是有看不见的空格的,我因直接比较犯了错,所以在此处打印比较测试我当初的猜想,结果如我所料

      */
    System.out.println("result.equals("0")=" + result.equals("0"));
    String lastDay = "";
    while (!result.trim().equals("0")) {//警告,这种已知的字符串比较一定要加.trim()去空格
    c.add(Calendar.DATE, 1);//如果目标日期是节假日则顺时开始下一天的判断
    lastDay = df.format(c.getTime());
    System.out.println("lastDay=" + lastDay);
    result = getHolidays(httpUrl, lastDay);
    System.out.println("while循环内result=" + result);
    System.out.println("if循环外result.equals("0")=" + result.equals("0"));
    if (result.trim().equals("0")) { //获取的日期不是节假日开始跳出循环         
     System.out.println("result.equals("0")=" + result.equals("0"));  
     break; }
    }
    System.out.println(lastDay);
    System.out.println(getDateFormat(lastDay));}

    附:文中的syso是我用来测试输出结果的,其实处理下来也不算难,弄清楚关键的俩个点就可以了,使用正确的api接口
    正确获取连续的日期进行比较并且返回结果!

  • 相关阅读:
    Activiti7工作流+SpringBoot
    他为何放弃580万年薪 拿月薪500元跟马云创业(眼光毒辣,半年的机会损失不算大,大不了再干会本行)
    周鸿祎在360新员工入职培训上的讲话(他们都是太聪明,把自己混失败了。大家一定要记住,混日子就是在糜费自己的时间。假设你不喜欢360,你一定要尽快换,尽快找到自己喜欢的事情)
    Apache多虚拟主机多版本PHP(5.3+5.6+N)共存运行配置全过程
    估值800亿的小米,宣布正式进军欧洲市场
    英特尔投资:7200万美元投资12家创新公司,包括3家中国公司(www.intelcapital.com)
    应用监控Metrics
    六大原则理
    PostgreSQL
    CAP原理和BASE思想
  • 原文地址:https://www.cnblogs.com/lg-wxf/p/9668839.html
Copyright © 2011-2022 走看看