我知道有多个问题要求确认有效日期。但是我无法找到确切的格式。因此,请勿将其标记为重复项。
我的网页中有一个以字符串形式返回的日期,例如2018年9月2日09:00。我需要在硒测试中确认这是一个日期。感谢有人可以帮助我将其验证为Java中的有效日期格式。
谢谢
答案 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;
}