我正在尝试使用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()时,它被解释为处于您正在应用的时区中:


  这将返回从该日期时间在指定时区形成的ZonedDateTime


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

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/

10-14 13:42
查看更多