为了账号安全,请及时绑定邮箱和手机立即绑定

将 XMLGregorianCalendar 转换为 LocalDateTime 时出现奇怪的结果

将 XMLGregorianCalendar 转换为 LocalDateTime 时出现奇怪的结果

江户川乱折腾 2023-07-13 13:48:52
我正在尝试将 XMLGregorianCalendarObject 转换为 LocalDateTime,但得到了不寻常的结果。我在这里做了一些可能是错误的假设:1) xmlDate 参数是 UTC2)返回值为PSTprivate 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 localDate: "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() 方法中的某个地方。奇怪的是,当我将不同的时区代码输入参数时,确实发生了转换。尝试使用“太平洋/奥克兰”。我究竟做错了什么?
查看完整描述

1 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

你的第一个假设是错误的:

1) xmlDate 参数是 UTC

末尾-07:002019-09-03T13:22:38.436-07:00是与 UTC 的偏移量。该偏移量与 America/Los_Angeles 时区(太平洋夏令时间)一致。Java 认识到这一点,因此当您转换为 America/Los_Angeles 时,它不会改变时间。当您转换为太平洋/奥克兰时,就会出现这种情况。

我相信你的代码是正确的。


查看完整回答
反对 回复 2023-07-13
  • 1 回答
  • 0 关注
  • 107 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信