考虑到夏令时,如何获得实时时区偏移量?

我现在在 +3 时区。
现在 UTC 时间是 16:30 而在我这里是 19:30

我发现了一个时区问题 America/Los_Angeles

理论上是 -8 (rawOffset) 我得到了意想不到的时间。我预计如果在我的地方 20:00,那么在这个 timezoe 时间应该少 11 小时(8+3),但在现实生活中,由于夏令时,它比我的地方少 10 小时。

那么如果America/Los_Angeles我的代码中有zoneId ,我怎么能得到 -7 偏移量呢?

TimeZone.getTimeZone("America/Los_Angeles").getRawOffset()/(3600*1000)

返回 -8 但现在它与 UTC 不同 7 小时

回答

如果您需要知道为 DST 正确调整的时区偏移量,请不要使用getRawOffset(),因为这特别是没有 DST 的偏移量。正如文档所说:

返回要添加到 UTC 以获取此时区中的标准时间的时间量(以毫秒为单位)。由于此值不受夏令时的影响,因此称为原始偏移量

要知道 DST 是否有效,系统需要知道日期,而不仅仅是时间。如果您知道完整的日期/时间,那么您可以通过调用 eg 来获取偏移量getOffset(long date)

要获得时区效应所抵消,现在,请致电:

int offset = TimeZone.getTimeZone("America/Los_Angeles")
                     .getOffset(System.currentTimeMillis());
int minutes = offset / 60000;

使用 Java 8 Time API,等效代码为:

ZoneOffset offset = ZoneId.of("America/Los_Angeles")
                          .getRules().getOffset(Instant.now());
int minutes = offset.getTotalSeconds() / 60;


以上是考虑到夏令时,如何获得实时时区偏移量?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>