【问题标题】:How to give Error message when user input wrong format of date in Java8当用户在 Java8 中输入错误的日期格式时如何给出错误消息
【发布时间】:2019-08-26 16:18:48
【问题描述】:

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

例如 如果 (yyyy

这是我用来询问用户并对其进行格式化的代码

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


    【解决方案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 模式

    【讨论】:

      【解决方案2】:

      如果用户应该只输入一个日期(例如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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-02
        • 2023-03-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多