将 XMLGregorianCalendar 转换为 LocalDateTime 时出现奇怪的结果
Strange results when converting XMLGregorianCalendar to LocalDateTime
我正在尝试将 XMLGregorianCalendarObject 转换为 LocalDateTime,但我得到了异常结果。 我已经尝试了 and 中的解决方案。
我在这里做了一些可能是错误的假设:
1) xmlDate 参数是 UTC
2) return 值为 PST
private LocalDateTime convertDate(XMLGregorianCalendar xmlDate) {
GregorianCalendar gc = xmlDate.toGregorianCalendar();
ZonedDateTime zdt = gc.toZonedDateTime();
LocalDateTime localDate = zdt.withZoneSameInstant(ZoneId.of("America/Los_Angeles")).toLocalDateTime();
return localDate;
}
输出与输入完全相同:
XMLGregorianCalendar xmlDate: "2019-09-03T13:22:38.436-07:00"
LocalDateTime 本地日期:“2019-09-03T13:22:38”
此外,这不起作用(相同的方法,不同的语法):
private LocalDateTime convertDate(XMLGregorianCalendar xmlDate) {
ZonedDateTime utcZoned = xmlDate.toGregorianCalendar().toZonedDateTime().withZoneSameInstant(ZoneId.of("America/Los_Angeles"));
LocalDateTime localDate = utcZoned.toLocalDateTime();
return localDate;
}
结果与第一个代码片段相同。
我认为我的问题出在 withZoneSameInstant() 方法的某处。 奇怪的是, 当我将不同的时区代码输入参数时, 会发生转换。用 "Pacific/Auckland" 试试。
我做错了什么?
你的第一个假设是错误的:
1) the xmlDate argument is UTC
2019-09-03T13:22:38.436-07:00
末尾的 -07:00
是与 UTC 的偏移量。偏移量与 America/Los_Angeles 时区(太平洋夏令时)一致。 Java 识别这一点,所以当您转换为 America/Los_Angeles 时,它不会改变时间。当您转换为 Pacific/Auckland 时,它确实如此。
我相信你的代码是正确的。
我正在尝试将 XMLGregorianCalendarObject 转换为 LocalDateTime,但我得到了异常结果。 我已经尝试了
我在这里做了一些可能是错误的假设:
1) xmlDate 参数是 UTC
2) return 值为 PST
private LocalDateTime convertDate(XMLGregorianCalendar xmlDate) {
GregorianCalendar gc = xmlDate.toGregorianCalendar();
ZonedDateTime zdt = gc.toZonedDateTime();
LocalDateTime localDate = zdt.withZoneSameInstant(ZoneId.of("America/Los_Angeles")).toLocalDateTime();
return localDate;
}
输出与输入完全相同:
XMLGregorianCalendar xmlDate: "2019-09-03T13:22:38.436-07:00"
LocalDateTime 本地日期:“2019-09-03T13:22:38”
此外,这不起作用(相同的方法,不同的语法):
private LocalDateTime convertDate(XMLGregorianCalendar xmlDate) {
ZonedDateTime utcZoned = xmlDate.toGregorianCalendar().toZonedDateTime().withZoneSameInstant(ZoneId.of("America/Los_Angeles"));
LocalDateTime localDate = utcZoned.toLocalDateTime();
return localDate;
}
结果与第一个代码片段相同。
我认为我的问题出在 withZoneSameInstant() 方法的某处。 奇怪的是, 当我将不同的时区代码输入参数时, 会发生转换。用 "Pacific/Auckland" 试试。
我做错了什么?
你的第一个假设是错误的:
1) the xmlDate argument is UTC
2019-09-03T13:22:38.436-07:00
末尾的 -07:00
是与 UTC 的偏移量。偏移量与 America/Los_Angeles 时区(太平洋夏令时)一致。 Java 识别这一点,所以当您转换为 America/Los_Angeles 时,它不会改变时间。当您转换为 Pacific/Auckland 时,它确实如此。
我相信你的代码是正确的。