mockServer andExpect(content().XML 与当前日期连接
mockServer andExpect(content().XML with current date concatenated
我收到一个断言错误“Body Content Expected child but was null when asserting the andExpect XML。如果我作为字符串“2020-10-01-5:00”输入,它工作正常但是如果我将日期连接成一个字符串,例如:
LocalDate startDate = LocalDate.now().minusDays(90);
String startDateLine = "<start-date>" + startDate + "-5:00</start-date>\n";
它抛出 AssertionError。我已经在调用之前验证了 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* from Trail: Date Time 的更多信息。
我收到一个断言错误“Body Content Expected child but was null when asserting the andExpect XML。如果我作为字符串“2020-10-01-5:00”输入,它工作正常但是如果我将日期连接成一个字符串,例如:
LocalDate startDate = LocalDate.now().minusDays(90);
String startDateLine = "<start-date>" + startDate + "-5:00</start-date>\n";
它抛出 AssertionError。我已经在调用之前验证了 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* from Trail: Date Time 的更多信息。