为什么有 26 个 GMT 偏移量?

Why there are 26 GMT offsets?

这个问题可能很傻,但我不明白为什么。

我想列出所有 GMT 时差。一天只有 24 小时所以我以为只有 24 GMT+/-。

但我发现有 26 个 GMT+/-(GMT,GMT-1 到 GMT-12,GMT+1 -> GMT+14)

请看这个测试https://www.mkyong.com/java/java-display-list-of-timezone-with-gmt/

有人能告诉我为什么吗?谢谢!

java.time classes 已经计划了更广泛的时区分布的可能性,因为时区经常 re-defined。

引用 java.time.ZoneOffset class 文档:

In 2008, time-zone offsets around the world extended from -12:00 to +14:00. To prevent any problems with that range being extended, yet still provide validation, the range of offsets is restricted to -18:00 to 18:00 inclusive.

实际上 significantly more offsets 比您原先想象的要多 - 从那篇维基百科文章来看,大约有 40 篇。

原因是多方面的:

  • 不同的国家/地区可能会选择将他们的时钟偏移到格林威治的小时和小时,或者比格林威治的小时和小时提前
  • 不同的国家允许不按小时计算的补偿;例如纽芬兰部分地区的偏移量为 half-hour。尼泊尔有 45 分钟的偏移量。
  • 政府可能会任意决定随意更改其时区,这意味着存在的偏移量数量始终在变化。例证:萨摩亚 jumped across the International Date Line.

了解了这些知识后,您应该感到安慰的是 Java 的 ZoneOffset 支持 an offset range of +18:00 to -18:00,而 ZoneOffset.of 接受 String范围。如果您真的想要枚举所有已知的可能时区,您可以使用一些字符串操作并以这种方式生成可能的时区(并跟踪有效的时区,或不要抛出一个DateTimeException),但我把它留作reader.

的练习