Java SimpleDateFormat 接受无效日期。使用格式 'MM/dd/yyyy' 解析 '01/01/2021anything'

Arn*_*Arn 2 java simpledateformat

我正在尝试将字符串日期值解析为日期对象。如果提供的日期格式不正确,则必须抛出错误。试图用 来实现这一点SimpleDateFormat,但它没有按预期工作。

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
sdf.setLenient(false);
Date d = sdf.parse("01/01/2021anything");
System.out.println(d);
Run Code Online (Sandbox Code Playgroud)

对于上面的代码,Fri Jan 01 00:00:00 GMT 2021我得到了预期的输出ParseException。有人可以解释为什么会发生这种情况以及我如何使用 验证上述日期SimpleDateFormat。感谢您的努力。

MC *_*ror 6

发生这种情况是因为它是这样实现的。

SimpleDateFormat根据文档,将检查格式,并开始解析格式中存在的每个标记,但不一定解析整个字符串

从给定字符串的开头解析文本以生成日期。该方法可能不会使用给定字符串的整个文本。

无论如何,你不应该使用SimpleDateFormatand Date,因为它们比这个有更多的问题。

请改用包中的类java.time。就您而言,您可能应该使用LocalDate. 将您的代码简单地转换为使用的代码java.time将如下所示:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
LocalDate d = LocalDate.parse("01/01/2021anything", formatter);
System.out.println(d);
Run Code Online (Sandbox Code Playgroud)

上面提到的代码会抛出 a DateTimeParseException,因为它不喜欢任何东西