Java - 验证给定的字符串代表日期,即“YYYY-MM-DD”?

Bil*_*lie 2 java validation datetime date

用户给我一个字符串,应表示过期日期,格式为“yyyy-mm-dd”。

我想验证它是否是日期,这就是我的做法:

try { 
    DateFormat df = new SimpleDateFormat("yyyy-mm-dd");
    System.out.println("Validating " + date + " as date");
    df.parse(date);
} 
catch (ParseException ex) { 
    // not yyyy-mm-dd date.
    System.out.println(": Bad");
    out.println(date + " cannot be parsed as a date. format: yyyy-mm-dd.");
    return;
}
Run Code Online (Sandbox Code Playgroud)

如果用户给我"2014-02-02gy."

然后它打印:"Validating 2014-02-02gy. as date"

即没有抛出异常。

为什么?以及如何验证日期?提前致谢。

编辑:使用正则表达式作为评论者的建议之一:

if (!date.matches("\\d{4}-\\d{2}-\\d{2}")  {
    out.println("Not a date"); 
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*ken 5

您始终可以使用某种格式来反转解析,以查看最终得到的结果是否与开始时的结果相同。

DateFormat df = new SimpleDateFormat("yyyy-mm-dd");
String after = df.format(df.parse(date));
if (after.equals(date)) {
    // validated
}       
Run Code Online (Sandbox Code Playgroud)