卜娃娃|最硬核的「Java8时间系统」设计原理与使用方法( 三 )


世界时间标准是一步步建立起来的 , 那么在标准建立之前 , 一定会有相对混乱的地方 。 一段时间用这个时区 , 一段时间又改为别的时区 , 而且还有可能反复 。 空口无凭?那就上证据 , 从爱国主义角度出发 , 先看中国的时区情况:
1[Overlap at 1901-01-01T00:00+08:05:43 to +08:00], 2[Gap at 1940-06-01T00:00+08:00 to +09:00], 3[Overlap at 1940-10-13T00:00+09:00 to +08:00], 4[Gap at 1941-03-15T00:00+08:00 to +09:00], 5[Overlap at 1941-11-02T00:00+09:00 to +08:00], 6[Gap at 1942-01-31T00:00+08:00 to +09:00], 7[Overlap at 1945-09-02T00:00+09:00 to +08:00], 8[Gap at 1946-05-15T00:00+08:00 to +09:00], 9[Overlap at 1946-10-01T00:00+09:00 to +08:00],10[Gap at 1947-04-15T00:00+08:00 to +09:00],11[Overlap at 1947-11-01T00:00+09:00 to +08:00],12[Gap at 1948-05-01T00:00+08:00 to +09:00],13[Overlap at 1948-10-01T00:00+09:00 to +08:00],14[Gap at 1949-05-01T00:00+08:00 to +09:00],15[Overlap at 1949-05-28T00:00+09:00 to +08:00],16[Gap at 1986-05-04T02:00+08:00 to +09:00],17[Overlap at 1986-09-14T02:00+09:00 to +08:00],18[Gap at 1987-04-12T02:00+08:00 to +09:00],19[Overlap at 1987-09-13T02:00+09:00 to +08:00],20[Gap at 1988-04-17T02:00+08:00 to +09:00],21[Overlap at 1988-09-11T02:00+09:00 to +08:00],22[Gap at 1989-04-16T02:00+08:00 to +09:00],23[Overlap at 1989-09-17T02:00+09:00 to +08:00],24[Gap at 1990-04-15T02:00+08:00 to +09:00],25[Overlap at 1990-09-16T02:00+09:00 to +08:00],26[Gap at 1991-04-14T02:00+08:00 to +09:00],27[Overlap at 1991-09-15T02:00+09:00 to +08:00]我们来解释下 , 这些都是什么意思 。 “Overlap”是重叠的意思 , 比如我把时间从9点调整到8点 , 那么从8点到9点这1个小时会再走一遍 , 这就是时间重叠 。 “Gap”是裂缝的意思 , 比如我把时间从9点调整到10点 , 那么从9点到10点这1个小时就不用走了 , 相当于直接蹦过去了 , 这就是时间裂缝 。 再进一步说 , 有重叠的说明时间是往回(后)调了 , 有裂缝的说明时间是往早(前)调了 。所以 , “1901-01-01T00:00+08:05:43 to +08:00”表达的意思是 , 中国在“1901-01-01T00:00”的时刻 , 把我们的时间偏移量从“+08:05:43”调整到“+08:00” , 就是往回调整了5分43秒 。 所以是“Overlap” , 即重叠 。
中国后续的全部都是在东8时区和东9时区之间的调整 , 最后一次是在“1991年09月15日凌晨02点00分”从“+09:00(东9区)”到“+08:00(东8区)” , 自此直到现在 , 中国都是使用的东8区时间 。 这些都是已经发生过的历史 , Java时间系统在设计时不可能不管它的 , 是要支持的 , 所以我说时区还是有点复杂的 。 哈哈 , 历史的包袱还是有点沉重的 。 美国啊 , 就更复杂了 , 中国好歹只有北京时间 , 美国的时间就不统一了 , 有东部时间、中部时间、山地时间、太平洋时间、阿拉斯加时间、夏威夷时间 。 而且它的时区变换也是异常多的 , 大概将近200次 , 这里只展示一部分 , 这里展示的是芝加哥的当地时间 , 属于美国中部时间:
1[Overlap at 1883-11-18T12:09:24-05:50:36 to -06:00], 2 3[Gap at 1918-03-31T02:00-06:00 to -05:00], 4[Overlap at 1918-10-27T02:00-05:00 to -06:00], 5[Gap at 1919-03-30T02:00-06:00 to -05:00], 6[Overlap at 1919-10-26T02:00-05:00 to -06:00], 7[Gap at 1920-06-13T02:00-06:00 to -05:00], 8[Overlap at 1920-10-31T02:00-05:00 to -06:00], 9[Gap at 1921-03-27T02:00-06:00 to -05:00],10[Overlap at 1921-10-30T02:00-05:00 to -06:00],11[Gap at 1922-04-30T02:00-06:00 to -05:00],12[Overlap at 1922-09-24T02:00-05:00 to -06:00],1314 。。。。。。。。。。 1516[Gap at 2005-04-03T02:00-06:00 to -05:00],17[Overlap at 2005-10-30T02:00-05:00 to -06:00],18[Gap at 2006-04-02T02:00-06:00 to -05:00],19[Overlap at 2006-10-29T02:00-05:00 to -06:00],20[Gap at 2007-03-11T02:00-06:00 to -05:00],21[Overlap at 2007-11-04T02:00-05:00 to -06:00],22[Gap at 2008-03-09T02:00-06:00 to -05:00],23[Overlap at 2008-11-02T02:00-05:00 to -06:00]