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

Pau*_*aul 9 java timezone timezone-offset

文档:

偏移量按它们在世界各地的同一时间发生的顺序进行比较.因此,+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(含).

And*_*ner 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)
Run Code Online (Sandbox Code Playgroud)

你可以把它们转换成一个时区的瞬间,比如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
Run Code Online (Sandbox Code Playgroud)

现在按照"先发生的事"的顺序对它们进行排序:

(1) 2016/05/25 14:00:00 GMT
(3) 2016/05/25 15:00:00 GMT
(2) 2016/05/26 00:00:00 GMT
Run Code Online (Sandbox Code Playgroud)

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

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

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

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