为什么`java.time.ZoneOffset`实例排序'向后'?

时间:2016-05-26 10:32:22

标签: java timezone timezone-offset

来自documentation

  

按照它们在世界各地的同一时间发生的顺序进行比较。因此,+10:00的偏移量在偏移量+09:00之前出现,依此类推至-18:00。

有谁知道他们这样订购的原因?这似乎是违反直觉的,因为它与偏移的数值的顺序相反。它也是在GMT / UTC + 0居中地图上从左到右阅读的顺序的反面。

(旁白:我不明白为什么引用的文件提到“下降到-18:00”。-12:00或-24:00我明白了。为什么-18:00?如果你打印退出所有支持的java.time.ZoneId时区的偏移量,范围从-11:00到+12:00。)

更新:我的回答。来自同一文档中的其他地方:

  

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

1 个答案:

答案 0 :(得分:6)

想象一下,您已经获得了某个事件发生时的相关时区的本地化日期/时间列表:

(1) 2016/05/26 00:00:00 in Australian Eastern Standard Time (UTC+10)
(2) 2016/05/26 00:00:00 in Greenwich Mean Time (UTC+0)
(3) 2016/05/26 00:00:00 in Japan Standard Time (UTC+9)

您可以将这些转换为一个时区的瞬间,比如GMT:

(1) 2016/05/25 14:00:00 GMT
(2) 2016/05/26 00:00:00 GMT
(3) 2016/05/25 15:00:00 GMT

现在按照&#34的顺序对它们进行排序;这首先发生在":

(1) 2016/05/25 14:00:00 GMT
(3) 2016/05/25 15:00:00 GMT
(2) 2016/05/26 00:00:00 GMT

所以澳大利亚时间(1)是在英国时间(2)之前的日本时间(3)之前。

它只是将相同的订单应用于时区:正如引言所说:

  

根据它们在世界各地的同一时间发生的顺序比较偏移量

所以考虑到澳大利亚东部标准时间"之前"日本标准时间,被认为是"之前"格林威治标准时间。