【发布时间】:2021-05-23 00:55:06
【问题描述】:
如何确保输入日期的月份和日期正确? ex 2021-99-99,显然没有这样的月份99天99。如何确保输入的月份数字在12以内并且正确的日期与月份对应?
最小的可重现代码示例:
SimpleDateFormat dateInput = new SimpleDateFormat("yyyy-MM-dd");
// In the real world the string will be entered by the user
String strDate = "2021-99-99";
try {
Date date = (Date) dateInput.parse(strDate);
System.out.println(new SimpleDateFormat("yyyy-MM-dd").format(date));
} catch (ParseException e) {
System.out.println("Wrong format");
} catch (DateTimeParseException e) {
e.printStackTrace();
System.out.println("Invalid date");
}
预期结果:从任一catch 块打印异常和错误消息。
观察到的输出:
2029-06-07
不是错误信息,也不是用户输入的日期。
【问题讨论】:
-
我建议你不要使用
SimpleDateFormat和Date。这些类设计不良且过时,尤其是前者,尤其是出了名的麻烦。而是使用来自java.time, the modern Java date and time API 的LocalDate和DateTimeFormatter。是的,DateTimeParseException也是,它来自同一个 API。 -
这能回答你的问题吗? SimpleDateFormat giving wrong date instead of error。我很谦虚地推荐my own answer here。抱歉,在其他人关闭您的问题之前,我太慢了,无法关闭副本。
标签: java date validation