我正在尝试使用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]
从上面的结果可以看出,
zdt
和ZoneDateTime.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/