为什么 java.time.ZoneOffset 个实例排序 'backwards'?

Why do java.time.ZoneOffset instances sort 'backwards'?

来自documentation

The offsets are compared in the order that they occur for the same time of day around the world. Thus, an offset of +10:00 comes before an offset of +09:00 and so on down to -18:00.

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

(旁白:我不明白为什么引用的文档指的是 "down to -18:00"。-12:00 或 -24:00 我能理解。为什么是 -18:00?如果打印出来所有支持的 java.time.ZoneId 时区的偏移量,范围从 -11:00 到 +12:00。)

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

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.

假设您有一个本地化 date/times 列表,其中包含某个事件发生时的相关时区:

(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)

您可以将这些转换为单一时区的瞬间,例如格林威治标准时间:

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

现在按 "which happened first":

的顺序排序
(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)早于日本时间(3),日本时间(3)早于英国时间(2)。

它只是对时区应用相同的顺序:正如引述所说:

The offsets are compared in the order that they occur for the same time of day around the world

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