setLenient(false)让日期格式的验证通过

时间:2018-03-29 23:42:08

标签: java simpledateformat

我正在尝试使用以下代码验证日期格式

class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
    String dateFormat = "yyyy-MM-dd";
    String dateToValidate = "18-12-18";

    if(!isThisDateValid(dateToValidate,dateFormat)){
        System.out.println("Date is invalid");
    }
    else{
        System.out.println("Date is valid");
    }
    }


       public static boolean isThisDateValid(String dateToValidate, String dateFromat){

        if(dateToValidate == null){
            return false;
        }

        SimpleDateFormat sdf = new SimpleDateFormat(dateFromat);
        sdf.setLenient(false);

        try {
            Date date = sdf.parse(dateToValidate);

        } catch (ParseException e) {
            return false;
        }

        return true;
    }
}

但是失败了让它通过。

此处提供的测试代码:https://ideone.com/ryN7HO

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

第18年是有效年份,SimpleDateFormat不强制执行特定模式(并且不需要零填充值)。但是,您可以使用正则表达式为模式添加检查。四位数字,短划线,两位数字,短划线和两位数字。像,

if (!dateToValidate.matches("\\d{4}-\\d{2}-\\d{2}")) {
    return false;
}

注意:此代码不符合Y10k。