gpt4 book ai didi

java - 无法使用 Java 8 中的 ZoneDdateTime 将 IST [亚洲/加尔各答] 转换为 AEST [澳大利亚/悉尼]

转载 作者:行者123 更新时间:2023-11-30 02:47:44 27 4
gpt4 key购买 nike

我正在尝试使用 java.time.ZonedDateTime< 将 IST [亚洲/加尔各答] 中的 LocalDateTime 转换为 AET [澳大利亚/悉尼]/。以下是我所做的:

LocalDateTime ldt    = LocalDateTime.now();
ZoneDateTime zdt = ldt.atZone(ZoneId.of("Australia/Sydney"));

System.out.println( ldt.toString() + " -- " + ZoneDateTime.now(ZoneId.systemDefault()));
System.out.printlb( zdt + " -- " + ZoneDateTime.now(ZoneId.of("Australia/Sydney")));

上面的代码给出了以下结果:

2016-09-23T22:53:55.790 -- 2016-09-23T22:53:55.790+05:30[Asia/Calcutta]
2016-09-23T22:57:50.855+10:00[Australia/Sydney] -- 2016-09-24T03:27:50.854+10:00[Australia/Sydney]

从上面的结果中可以看出,zdtZoneDateTime.now(ZoneId.of("Australia/Sydney")) 给了我不同的日期和时间。

谁能帮我解决这个问题。

最佳答案

LocalDateTime没有时区,所以当您调用atZone()时,它被解释为位于您正在应用的区域中:

This returns a ZonedDateTime formed from this date-time at the specified time-zone.

要实际转换时间,它需要知道原始区域。

ZonedDateTime zdt1 = ZonedDateTime.now(ZoneId.of("Asia/Calcutta"));
ZonedDateTime zdt2 = zdt1.withZoneSameInstant(ZoneId.of("Australia/Sydney"));
System.out.println(zdt1); // prints: 2016-09-23T23:10:00.678+05:30[Asia/Calcutta]
System.out.println(zdt2); // prints: 2016-09-24T03:40:00.678+10:00[Australia/Sydney]

关于java - 无法使用 Java 8 中的 ZoneDdateTime 将 IST [亚洲/加尔各答] 转换为 AEST [澳大利亚/悉尼],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39666541/

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