SimpleDateFormat电话号码意外成功

Sou*_*are 3 java string datetime

意外地将电话号码字符串传递给SimpleDateFormat格式方法有时会导致解析有效日期.

例如,传递数字"518-123-4567"(字面,带连字符)不知何故导致日期"11/23/0517 05:27 AM"

我们在一个String可以表示许多不同内容的区域中使用它,并且我们假设在解析为日期时,通常写入电话号码的方式中带有数字和连字符的字符串会失败.我们的代码只是检查ParseException,并接受任何不会抛出此类异常的内容. 为什么这种字符串不能解析? 有没有更好的方法来检查字符串是否可能是一个日期?

private static Date getPromisedDate(String promisedText) {
    SimpleDateFormat promsiedDateTimeFormat = new SimpleDateFormat("yyyyMMddHHmm"); 
    if(null != promisedText) {
        try {
            return promsiedDateTimeFormat.parse(promisedText);          
        }
        catch (ParseException e) { }
    }            
    return null;
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 7

SimpleDateFormat处于"宽松"模式 - 这确实非常宽松.如果你使用

promsiedDateTimeFormat.setLenient(false);
Run Code Online (Sandbox Code Playgroud)

当你试图解析虚假数据时,它会抛出异常.

我个人认为默认情况下应该严格,但......