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

时间:2019-04-23 12:05:30

标签: java java-time

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

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

2 个答案:

答案 0 :(得分:79)

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

在适当地对时区进行标准化之前,亚分钟偏移在19世纪末和20世纪初的数据中很常见。例如,Europe/Paris在1911年之前的偏移量为+00:09:21(根据IANA数据库)。

为此,我能找到的最新事件是Africa/Monrovia,距1972年为止只有不到一分钟的时间!

答案 1 :(得分:3)

精确度高的一个原因是,我们都熟悉的国家时区并不是故事的终点。

如果您查看Wikipedia's article on UTC下的“另请参阅”部分,则会看到一些时间标准,这些时间标准与UTC有几分之一秒(甚至是几分之一秒)的偏移量。{{3 }}是UTC的基础。目前差异为37秒,因为UTC包含leap秒,而TAI则不包含。因此,支持父标准需要二级精度。

TAI (International Atomic Time)也从UTC偏移了几秒钟(相对于TAI的偏移固定为19秒)。 GPS时间和TAI(或其他衍生物)对于导航,电信/广播和太空科学至关重要。

一旦进入天文学,事情就会变得更加复杂。 GPS time(维基百科)与更常见的标度相比有一个小数的偏移量:TT≅TAI + 32.184 s(精确到毫秒; TT比这复杂得多)。

进一步的阅读,因为尚未与该问题相关联:Terrestrial time-包含一些有趣的背景。