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



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

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

对于上面的代码得到输出Fri Jan 01 00:00:00 GMT 2021,我期望ParseException。有人能解释一下为什么会发生这种情况,以及我如何用SimpleDateFormat验证上述日期吗?谢谢你的努力。

这是因为它是这样实现的。

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

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

你不应该使用SimpleDateFormatDate,因为它们比这个有更多的问题。

使用java.time包中的类代替。在您的情况下,您可能应该使用LocalDate。使用java.time将代码简单地转换为代码,就像这样:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy");
LocalDate d = LocalDate.parse("01/01/2021anything", formatter);
System.out.println(d);
上面的代码将抛出一个DateTimeParseException,因为它不喜欢任何

相关内容

  • 没有找到相关文章