当用户在Java8中输入错误的日期格式时,如何给出错误消息

问题描述 投票:-1回答:2

如果用户使用错误的格式输入,我想给出错误消息。正确的格式是“yyyy-MM-dd HH:mm:ss”。我怎么能把它作为一个条件?

例如if(yyyy <0){sout(“请输入正确的年份”)}

这是我用来询问用户并格式化它的代码

Scanner keyboard = new Scanner(System.in);
        String hour = "00:00:00";
        System.out.println("Please enter Date : ");
        String time = keyboard.next()+" "+ hour;
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime dateTime = LocalDateTime.parse(time, formatter);
java datetime-format localdate
2个回答
1
投票

您可以使用正则表达式比较:

while input doesn't match the regex pattern
     print "Please enter date in the correct format: yyyy-MM-dd HH:mm:ss"
continue with the rest of the code

RegEx模式可能是:

\ d {4} - [01] \ d- [0-3] \ d [0-2] \ d:[0-5] \ d:[0-5] \ d(?:。\ d +)? Z'

您可以使用this站点来创建和测试RegEx模式


0
投票

如果用户只需输入日期(例如2019-03-31),则没有理由说您的程序也应该关注时间。此外,您的格式是ISO 8601,LocalDate的格式和其他java.time解析(也打印)的类作为默认格式。所以你不需要一个明确的格式化程序。

我知道您需要进行范围检查,这当然是可取的。此外,如果用户输入完全不同的格式,解析将抛出一个DateTimeParseException,您应该捕获并采取相应的行动。例如:

    LocalDate minAcceptedDate = LocalDate.of(0, Month.JANUARY, 1);
    LocalDate maxAcceptedDate = LocalDate.of(4000, Month.DECEMBER, 31);

    Scanner keyboard = new Scanner(System.in);
    System.out.println("Please enter Date : ");
    while (true) {
        String time = keyboard.next();
        try {
            LocalDate dateTime = LocalDate.parse(time);
            if (dateTime.isBefore(minAcceptedDate) || dateTime.isAfter(maxAcceptedDate)) {
                System.out.println("Please enter a date in the range " + minAcceptedDate + " through " + maxAcceptedDate);
            } else { // OK
                break;
            }
        } catch (DateTimeParseException dtpe) {
            System.out.println("Please enter a date in format yyyy-mm-dd");
        }
    }

示例会话:

Please enter Date : 
Yesterday
Please enter a date in format yyyy-mm-dd
-001-12-30
Please enter a date in format yyyy-mm-dd
5000-12-12
Please enter a date in the range 0000-01-01 through 4000-12-31
2016-09-22
© www.soinside.com 2019 - 2024. All rights reserved.