【问题标题】:How do I check if an input date (month&day) is within the reasonable range?如何检查输入日期(月&日)是否在合理范围内?
【发布时间】: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

不是错误信息,也不是用户输入的日期。

【问题讨论】:

标签: java date validation


【解决方案1】:

使用 java.time 包中的现代日期时间类。切勿使用DateCalendarSimpleDateFormat

DateTimeParseException 的陷阱

将您的输入字符串解析为LocalDate 对象。输入错误时捕获DateTimeParseException

String input = "2021-99-99" ; 
try {
    LocalDate ld = LocalDate.parse( input ) ;
} catch ( DateTimeParseException e ) {
    … handle faulty input
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多