我收到断言错误“正文内容预期子项,但在断言 andExpect XML 时为空。如果我作为字符串输入“2020-10-01-5:00”,它工作正常,但如果我连接日期成一个字符串,如:
LocalDate startDate = LocalDate.now().minusDays(90);
String startDateLine = "<start-date>" + startDate + "-5:00</start-date>\n";
它抛出断言错误。我在调用之前已验证 XML 是否正确,因此我不确定获取日期并转换为字符串会导致测试失败。
最佳答案
更新
请勿将偏移字符串添加到 LocalDate
字符串中以将其转换为 OffsetDateTime
字符串。下面所示是将 LocalDate
转换为 OffsetDateTime
LocalDate.of(2020, 10, 1)
.atStartOfDay()
.atOffset(ZoneOffset.of("-05:00"));
演示:
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
public class Main {
public static void main(String[] args) {
LocalDate date = LocalDate.of(2020, 10, 1);
LocalDateTime ldt = date.atStartOfDay();
OffsetDateTime odt = ldt.atOffset(ZoneOffset.of("-05:00"));
System.out.println(odt);
}
}
输出:
2020-10-01T00:00-05:00
您可以使用函数 OffsetDateTime#toString
获取 OffsetDateTime
的 String
表示形式例如
String strOdt = odt.toString();
原始答案
- 更改您的输入,使时区偏移量采用
HH:mm
格式,例如-05:00
使其符合 ISO 8601 standards . - 将
DateTimeFormatterBuilder
与.parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
结合使用,将一天中的小时默认为 0。 - 将给定字符串解析为
OffsetDateTime
,因为它具有时区偏移量,并且OffsetDateTime
最适合表示具有时区偏移量的日期时间。
演示:
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.temporal.ChronoField;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
DateTimeFormatter dtf =new DateTimeFormatterBuilder()
.appendPattern("u-M-d[H:m:s]XXX")
.parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
.toFormatter(Locale.ENGLISH);
OffsetDateTime odt = OffsetDateTime.parse("2020-10-01-05:00", dtf);
System.out.println(odt);
}
}
输出:
2020-10-01T00:00-05:00
注意方括号内的可选模式。
了解有关 modern Date-Time API 的更多信息* 来自 Trail: Date Time 。
关于java - mockServer andExpect(content().XML 与当前日期连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68777420/