根据附加参数验证日期范围

时间:2016-01-02 13:13:35

标签: java datetime simpledateformat

我正在处理需求,我需要根据第三个参数验证两个日期之间的差异。

要求:

  • EndDate从开始日期起不应超过14天。
  • 如果延期,则endDate不应超过28天 开始日期。
  • 如果结束日期或开始日期等于“NA”(无值),那么我不需要 执行验证

我已经编写了下面的代码,但它没有给出完美的测试结果。请帮我纠正这段代码。

public static boolean validateDateRange(String startDate,String EndDate,String extension){  
        if(startDate.equals("NA")||EndDate.equals("NA")){
            return true;
        }
        else{
            boolean x=false;
            if(extension.equalsIgnoreCase("Y")){
                x=true;
            }
                Date d1 = null;
                Date d2 = null;
                SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
                try {
                    d1 = format.parse(startDate);
                    d2 = format.parse(EndDate);
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                long diff = d2.getTime()- d1.getTime();//in Milli seconds
                long numOfDays = diff/(1000*60*60*24);
                System.out.println(numOfDays);
                if(numOfDays >14&&(x&&numOfDays>28)){
                    return false;
                }
                else{
                    return true;
                }
        }

    }

1 个答案:

答案 0 :(得分:0)

基本上,只删除了一些冗余的if。但是,您应该重新考虑发生异常时会发生什么。在这种情况下继续处理没有多大意义。在这种情况下,返回值应该是true,因为您不希望任何人因系统错误而被罚款。甚至可能重新抛出异常?

public static boolean validateDateRange(String startDate,String EndDate,String extension){  
    if(startDate.equals("NA")||EndDate.equals("NA")){
        return true;
    }

    boolean x = extension.equalsIgnoreCase("Y");

    Date d1 = null;
    Date d2 = null;
    SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
    try {
        d1 = format.parse(startDate);
        d2 = format.parse(EndDate);
        long diff = d2.getTime()- d1.getTime();//in Milli seconds
        long numOfDays = diff/(1000*60*60*24);
        System.out.println(numOfDays);

        return !((!x && numOfDays > 14) || numOfDays > 28);
    } catch (ParseException e) { // maybe rethrow exception?
        e.printStackTrace();
    }

    return true;
}