我得到一个断言错误"期望的子元素,但在断言andexexpect XML时为空。如果我输入as作为字符串"2020-10-01 05: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
<<p>在线演示/kbd>您可以使用函数OffsetDateTime#toString
获得OffsetDateTime
的String
表示,例如
String strOdt = odt.toString();
<标题>原始回答- 将您的输入更改为
HH:mm
格式的时区偏移量,例如-05:00
,使其符合ISO 8601标准。 - 使用
DateTimeFormatterBuilder
和.parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
来默认一天中的小时为0。 - 解析给定的字符串为
OffsetDateTime
,因为它有时区偏移,OffsetDateTime
最适合表示带有时区偏移的Date-Time。
演示:
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
<<p>在线演示/kbd>注意方括号内的可选模式。
了解更多关于现代日期时间API*从Trail: Date Time.
标题>