检查日期时间的格式与自定义格式匹配 ( "dd/MM/yyyy HH:mm:ss" ) - Java



我正在编写一个测试来检查从ping数据库返回的dateTime是否是预期的格式。

我想要的格式是"dd/MM/yyyy HH: MM:ss"

我当前的代码是使用一个DateTimeFormatter定义自定义格式,它应该匹配,然后解析从ping返回的dateTime。断言assertEquals用于检查它们的格式是否相同。

然而,我得到一个异常,因为格式化程序返回不正确的格式:

java.lang.AssertionError: 
Expected:2021-08-10T17:18:53
Actual:10/18/2021 17:18:53

正如你所看到的,期望的格式不是它应该是什么。

这是我当前的代码

String dateTime = JsonPath.read(res.getResponse().getContentAsString(),"$.[0].datetime");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss");
LocalDateTime parsedDateTime = LocalDateTime.parse(dateTime,formatter);
try {
Assert.assertEquals(parsedDateTime, dateTime);
} catch (AssertionError e){
throw e;
}

我会这样做:

private static final DateTimeFormatter PARSER
= DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss", Locale.ROOT);
@Test
public void correctFormatReceived() {
String dateTime = "10/18/2021 17:18:53"; // get from JSON
LocalDateTime.parse(dateTime, PARSER);
}

如果格式不正确,LocalDateTime.parse()将抛出DateTimeParseException, JUnit或您的测试运行器将随后报告。

如果您希望严格验证日期和时间值(例如,检测它们是否在非闰年发送2月29日),请在格式化程序上指定:

private static final DateTimeFormatter PARSER
= DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss", Locale.ROOT)
.withResolverStyle(ResolverStyle.STRICT);

如果您想更清楚地区分不正确的格式和无法运行到完成的测试,捕获异常并声明测试失败:

try {
LocalDateTime.parse(dateTime, PARSER);
} catch (DateTimeParseException dtpe) {
Assert.fail(dtpe.toString());
}

你的测试出了什么问题?正如其他人在评论中所说,在Java中,String永远不可能等于LocalDateTime。所以你的Assert.assertEquals(parsedDateTime, dateTime);在任何情况下都会失败。此外,能够解析字符串就足以确定指定的格式是否符合预期;所以在你的测试中,你不需要测试任何等式

最新更新