将 LocalDateTime UTC 转换为 Europe/Rome 给了我错误的结果

Convert LocalDateTime UTC to Europe/Rome gave me wrong result

我试图搜索同样的问题,但没有找到我做错了什么。

我需要将 UTC LocalDateTime 转换为 Europe/Rome LocalDateTime。 我正在遵循我在 SO 上找到的这种方法,但我得到了错误的结果:

ZonedDateTime zonedDateTime = LocalDateTime.of(2020, 01, 01, 15, 0, 0).atZone(ZoneId.of("UTC"));
System.out.println(zonedDateTime);
ZonedDateTime current = zonedDateTime.withZoneSameInstant(ZoneId.systemDefault());
System.out.println(current);
System.out.println(current.toLocalDateTime());

我希望“转换后的时间”是 17:00,但我得到了这个结果。

2020-01-01T15:00Z[UTC]
2020-01-01T16:00+01:00[Europe/Rome]
2020-01-01T16:00

谢谢

I'm expecting the "converted time" to be 17:00 but I'm having this result.

我不确定你为什么这么期待。 16:00 是正确答案。

也许您没有注意到这是 1 月 ,当时欧洲大陆处于 冬令时,比 UTC 时间早 1 小时。

1 月 1 日 15:00:00 UTC 时间意味着罗马 +1 小时。这里没办法得到17:00:00。也许可以在夏季约会时尝试一下。那会让你有 2 小时的时差。

您的代码没有任何问题。这就是如何做到这一点,这就是为什么它给你 16:00:00(因为这是正确的答案)。