在 Java 8 中没有得到正确的时区?

Not getting correct timezone in Java 8?

我已将我的系统数据时间设置为 Asia/Kolkata,它是:

Date: 2015-06-12
Time: 12:07:43.548

现在我已经在 Java 8

中编写了以下程序
ZoneId paris = ZoneId.of("Europe/Paris");
LocalDateTime localtDateAndTime = LocalDateTime.now();
ZonedDateTime dateAndTimeInParis  = ZonedDateTime.of(localtDateAndTime, paris );
System.out.println("Current date and time in a particular timezone : " + dateAndTimeInParis  );

当我 运行 代码显示以下巴黎时间:

Current date and time in a particular timezone :    

2015-06-12T12:07:43.548+02:00[Europe/Paris]

以上Europe/Paris与Asia/Kolkata相同。谁能解释一下我哪里做错了?

更新:我不想使用另一个Java包中的class;因为我听说这个包 java.time 有足够的功能来处理最大日期时间作业,我希望包括这个:)

A LocalDateTime 是没有时区的日期和时间。当您从中创建一个 ZonedDateTime 对象时,您明确地将时区附加到 LocalDateTime.

它不会从您的时区转换为 Europe/Paris 时区;请注意 LocalDateTime 根本没有时区;它不知道你的意思是 Asia/Kolkata.

如果您想从加尔各答时间转换为巴黎时间,请从使用 Asia/Kolkata 时区的 ZonedDateTime 开始:

// Current time in Asia/Kolkata
ZonedDateTime kolkata = ZonedDateTime.now(ZoneId.of("Asia/Kolkata"));

// Convert to the same time in Europe/Paris
ZonedDateTime paris = kolkata.withZoneSameInstant(ZoneId.of("Europe/Paris"));

(编辑,感谢 JBNizet):如果你只想在 Europe/Paris 时间内 "now",你可以这样做:

ZonedDateTime paris = ZonedDateTime.now(ZoneId.of("Europe/Paris"));