如何确保输入的日期具有正确的月份和日期? 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
这不是错误消息,也不是用户输入的日期。
答案 0 :(得分:2)
使用 java.time 包中的现代日期时间类。切勿使用 Calendar
、SimpleDateFormat
和 DateTimeParseException
。
LocalDate
的陷阱将您的输入字符串解析为 DateTimeParseException
对象。错误输入时的 String input = "2021-99-99" ;
try {
LocalDate ld = LocalDate.parse( input ) ;
} catch ( DateTimeParseException e ) {
… handle faulty input
}
陷阱。
{{1}}