为什么会有26个GMT偏移量?

3

这个问题可能有些愚蠢,但我想不出为什么。

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

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


也许可以参考https://zh.wikipedia.org/wiki/UTC%2B14:00。 - ZhongYu
1
这不是一个编程问题。我其实不确定,但我猜时区是一个地理学的话题。 - puhlen
1
实际上还有更多内容,相关解释可以在文档中找到:https://docs.oracle.com/javase/8/docs/api/java/time/ZoneOffset.html。基本上,使用区域/国家的时区偏移量是一项政治决策。 - JB Nizet
1
政客们喜欢对时钟玩弄。 - ZhongYu
@BasilBourque 时区在编程中非常重要,但这个问题不是关于如何使用时区或时区的工作原理,而是关于为什么世界上存在某些时区,这不是一个编程问题,而是地缘政治问题。 - puhlen
显示剩余3条评论
2个回答

4

实际上,与您最初想象的偏移量相比,偏移量要多得多——根据维基百科文章,大约有40个。

原因有多种:

  • 不同的国家可能选择将其时钟向格林威治时间提前或推迟数小时。
  • 不同的国家允许的偏移量不一定是整小时;例如,纽芬兰省的某些地区偏移半小时。尼泊尔的偏移量为45分钟。
  • 政府可能会任意决定更改其时区,这意味着存在的偏移量始终在变化。例如:萨摩亚跨越了国际日期变更线

有了这些知识,您应该放心,因为Java的ZoneOffset支持 +18:00到-18:00的偏移范围,并且ZoneOffset.of接受一个String参数。如果您真的想枚举所有已知的可能时区,可以使用一些字符串操作来生成可能的时区(并跟踪那些有效或不会引发DateTimeException的时区),但我将其留给读者作为练习。


0

java.time类已经考虑到时区的更广泛传播,因为时区经常被重新定义。

引用java.time.ZoneOffset类文档:

2008年,全球各地的时区偏移量从-12:00到+14:00。为了防止该范围被扩展而产生任何问题,同时仍然提供验证,偏移量的范围限制为-18:00至18:00(含)。


1
为什么要踩我?我正准备发布这个信息。 - Basil Bourque
@BasilBourque:在您编辑这些信息的时候,这个特定的信息并不存在。 - Makoto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接