验证字符串“ 2 Sep 2018 09:00”是有效的日期格式

时间:2018-09-19 23:30:35

标签: java validation datetime datetime-parsing

我知道有多个问题要求确认有效日期。但是我无法找到确切的格式。因此,请勿将其标记为重复项。

我的网页中有一个以字符串形式返回的日期,例如2018年9月2日09:00。我需要在硒测试中确认这是一个日期。感谢有人可以帮助我将其验证为Java中的有效日期格式。

谢谢

2 个答案:

答案 0 :(得分:2)

要求用户的区域设置为标准格式

    DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(
                    FormatStyle.MEDIUM, FormatStyle.SHORT)
            .withLocale(Locale.UK);
    ZoneId userTimeZone = ZoneId.of("Europe/London");
    // Require a comma between date and time
    String returnedFromWebPage = "2 Sep 2018, 09:00";
    // Remove any space before the date or after the time
    returnedFromWebPage = returnedFromWebPage.trim();
    try {
        ZonedDateTime dateTime = LocalDateTime.parse(returnedFromWebPage, formatter)
                .atZone(userTimeZone);
        if (dateTime.isBefore(ZonedDateTime.now(userTimeZone))) {
            System.out.println("A valid date time");
        } else {
            System.out.println("Not in the past");
        }
    } catch (DateTimeParseException dtpe) {
        System.out.println("Not a valid date time format");
    }

在Java 10上运行时的输出:

  

有效日期时间

具有默认语言环境数据的Java 10认为,英国的日期和时间表示法可能类似于2 Sep 2018, 09:00(取决于您想要的时间长短),即在日期和时间之间使用逗号,否则就像您的输入字符串。因此,一个建议是查看您的用户是否可以同意这一点,然后以这种方式输入日期和时间。如果这符合英国的规范是正确的,我认为他们会很乐意。

现在,我完全不知道您的用户是否是英国人。 Java具有数百种语言环境的本地化格式。我认为您首先应该使用用户的语言环境。如果他们碰巧说斯瓦希里语,则标准格式似乎没有逗号:

    DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(
                    FormatStyle.MEDIUM, FormatStyle.SHORT)
            .withLocale(Locale.forLanguageTag("sw"));
    ZoneId userTimeZone = ZoneId.of("Africa/Nairobi");
    String returnedFromWebPage = "2 Sep 2018 09:00";

通过这些更改,代码还将打印A valid date time

如果需要,请构建自己的格式化程序

如果您的用户对Java中的任何内置格式不满意,则需要指定他们要使用的格式:

    DateTimeFormatter formatter 
            = DateTimeFormatter.ofPattern("d MMM uuuu HH:mm", Locale.ENGLISH);
    String returnedFromWebPage = "2 Sep 2018 09:00";

这还将导致代码打印A valid date time

答案 1 :(得分:0)

我找到了办法。发布,因为它将很有用。

            String dateformat = "A valid date time format";
    String notValidDateFormat = "Not a valid date time format" ;
    final DateFormat fmt = new SimpleDateFormat("dd MMM yyyy hh:mm");
    Date input = null;
    try {
        input = fmt.parse(offerDate);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    if (input.before(new Date())) {
        return dateformat;
    }
    return notValidDateFormat;
}