在 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"));
我已将我的系统数据时间设置为 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"));