为什么有26个GMT补偿?

时间:2017-02-15 21:39:48

标签: java time gmt datetimeoffset

这个问题可能很愚蠢,但我无法弄清楚原因。

我想列出所有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/

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

2 个答案:

答案 0 :(得分:4)

实际上significantly more offsets比你原先想象的那样 - 从维基百科的文章中,大约有40篇。

原因是多方面的:

  • 不同的国家/地区可能会选择将其时钟抵消为格伦威奇后面的小时数和小时数,或者格林威治时间提前
  • 不同的国家允许不按小时计算的抵消额;例如,纽芬兰的零件偏差为半小时。尼泊尔的抵消时间为45分钟。
  • 政府可以随意决定随意改变他们的时区,这意味着存在的抵消数量总是在不断变化。例证:萨摩亚jumped across the International Date Line

有了这些知识,你应该知道Java ZoneOffset支持an offset range of +18:00 to -18:00ZoneOffset.of接受String参数。如果确实想要枚举所有已知的可能时区,您可以使用一些字符串操作并以这种方式生成可能的时区(并跟踪那些有效的时区,或者 don' t 抛出一个DateTimeException),但我把它作为读者的练习。

答案 1 :(得分:0)

由于区域经常被重新定义,java.time类已经计划了更大范围的时区扩展的可能性。

引用java.time.ZoneOffset类文档:

  

2008年,世界各地的时区抵消时间从-12:00延长至+14:00。为了防止扩展该范围的任何问题,但仍然提供验证,偏移范围限制在-18:00到18:00(包括端点)。