为什么 Java 支持秒精度的时区偏移量?

2022-08-31 20:34:25

在维基百科上,时区偏移量被解释为小时和分钟与标准UTC时间的差异。但是,DateTimeFormatter支持区域偏移模式,该模式“输出小时和分钟以及可选的秒,并带有冒号,例如'+01:30:15'。XXXXX

像ISO这样的偏移量有效吗?如果不是,Java根据哪个标准定义这种偏移量?+01:30:15


答案 1

ISO-8601 不支持它,但它 IANA 时区数据库中记录的有效偏移量。

亚分钟偏移量在 19 世纪末和 20 世纪初的数据中很常见,当时区尚未得到适当标准化。例如,直到 1911 年,欧洲/巴黎的偏移量为 +00:09:21(根据 IANA 数据库)。

我能找到的最新事件是非洲/蒙罗维亚,直到1972年才有一个亚分钟的偏移量!


答案 2

额外精确度的一个原因是,我们都熟悉的国家时区并不是故事的结局。

如果你看一下维基百科关于UTC的文章下的“另请参阅”部分,你会看到一系列时间标准,这些标准与UTC有第二(甚至小数秒)的偏移量。特别令人感兴趣的是UTC所基于的TAI(国际原子时间)。目前的差异是37秒,因为UTC包括闰秒,而TAI不包括。因此,要支持父标准,需要二级精度。

GPS 时间也与 UTC 偏移了数秒(相对于 TAI 的偏移固定为 19 秒)。GPS时间和TAI(或其它衍生物)对于导航,电信/广播和空间科学非常重要。

一旦你进入天文学领域,事情就变得更加复杂。地面时间(维基百科)与更常见的刻度有一个小数偏移:TT≅TAI + 32.184 s(到毫秒精度;TT比这更复杂)。

进一步阅读,因为它还没有从这个问题联系起来:程序员相信时间(和时区,日期等)的错误 - 包括一些有趣的背景。


推荐