如何获取 Java 中时区的 UTC 偏移量?

How do I get the UTC offset for a timezone in Java?

给定一个时区 (America/New_York),我该如何获取 UTC 偏移量?

我曾尝试使用 java.util.TimeZone 但没有成功。如果解决方案可行,我也可以使用 Joda Time。

由于夏令时等原因,特定时区的偏移量可能会根据当前时间而变化。UTC 没有夏令时,但 "America/New_York" 会通过夏令时开关更改偏移量。因此,偏移量是 当前时间和时区的函数。这里的答案给出了一些如何获取当前偏移量的例子:

Java TimeZone offset

注意:当前偏移量取决于

  • 原始 tz 偏移量
  • 当前时刻的夏令时 (DST)。

这在附近的答案中有很好的描述。

有用的片段:

  • TimeZone.getTimeZone("Europe/Kiev").getOffset(Instant.now().toEpochMilli()); 将为您提供以毫秒为单位的整数偏移量
  • String.format("%tz", Instant.now().atZone(ZoneId.of("Europe/Kiev"))); 将为您提供标准化的字符串表示形式,例如“+0300”