gpt4 book ai didi

java - 将 GMT 中的 XMLGregorianCalendar 转换为 LocalDateTime 太平洋时间

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:02:27 29 4
gpt4 key购买 nike

我正在尝试将以 GMT/UTC 格式发送的 XMLGregorianCalendar 转换为 America/Los_Angeles 时区的 Java 8 LocalDateTime,但没有成功。

这是我尝试过但无法将时间转换为太平洋时间的方法。

//xmlDate is 2017-11-13T00:00:00Z
ZonedDateTime zDateTime = xmlDate.toGregorianCalendar().toZonedDateTime().toLocalDateTime().atZone(ZoneId.of("America/Los_Angeles"));
LocalDateTime localDateTime = zDateTime.toLocalDateTime();
//Expected localDateTime is 2017-11-12T16:00. But I only get 2017-11-13T00:00

我错过了什么?

最佳答案

atZone() 并不如您所想。它只是将时区附加到日期而不保留时间。您必须使用 ZonedDateTime#withZoneSameInstant() 来执行此操作,它会保持即时并修改区域:

public static void main(String[] args) throws Exception {
XMLGregorianCalendar xc = DatatypeFactory.newInstance().newXMLGregorianCalendar(2017, 10, 13, 0, 0, 0, 0, 0);
System.out.println(xc);
GregorianCalendar gc = xc.toGregorianCalendar();
System.out.println(gc);
ZonedDateTime zdt = gc.toZonedDateTime();
System.out.println(zdt);
LocalDateTime ldt = zdt.withZoneSameInstant(ZoneId.of("America/Los_Angeles")).toLocalDateTime();
System.out.println(ldt);
}

关于java - 将 GMT 中的 XMLGregorianCalendar 转换为 LocalDateTime 太平洋时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47245272/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com