无法使用Java8中的ZoneDateTime将IST [Asia / Calcutta]转换为AET [Australia / Sydney]

时间:2016-09-23 17:35:28

标签: java timezone

我正在尝试使用The Prefix "xsi" For Attribute "xsi:schemaLocation" Associated With An Element Type "store-inventory" Is Not Bound.将IST [亚洲/加尔各答]中的 LocalDateTime 转换为 AET [澳大利亚/悉尼] 。以下是我的所作所为:

java.time.ZonedDateTime

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

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给了我不同的日期和时间。

任何人都可以帮我解决这个问题。

1 个答案:

答案 0 :(得分:2)

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]