Unix时间和闰秒(Unix time and leap seconds)

2019-09-03 02:33发布

对于UNIX(POSIX)时, 维基百科说:

由于其处理的闰秒,这样既不时间的线性表示,也不UTC的真实表示。

但是Unix的date命令似乎并没有意识到他们实际上

$ date -d '@867715199' --utc
Mon Jun 30 23:59:59 UTC 1997
$ date -d '@867715200' --utc
Tue Jul  1 00:00:00 UTC 1997

虽然应该是一个闰秒有Mon Jun 30 23:59:60 UTC 1997

这是否意味着只有date命令忽略闰秒,而Unix时间概念不?

Answer 1:

每天的秒数被固定 的Unix时间戳 。

的Unix时间数是在Unix时间戳零,并且由于历元正好86400每天增加。

因此,它不能代表闰秒。 操作系统将放缓,以适应这种时钟。 闰秒是根本就Unix的时间戳是关注存在。



Answer 2:

Unix的时间是容易的工作,但有些时间戳是不是真正的时间,而有些时间戳是不是唯一的时间。

也就是说,有代表在两个不同的时间秒一些重复的时间戳,因为在UNIX时间的1/60秒可能要重演(因为没有六十一分之一每秒能)。 从理论上讲,他们也可能在未来的差距,因为1/60秒不必存在,虽然没有跳过闰秒迄今已发出。

理UNIX时间:它的定义,因此,它很容易的工作。 添加闰秒,支持标准库是非常棘手的。 例如,你想表示2050年1月1日在数据库中。 地球上没有人知道该日期多少秒掉在UTC! 日期无法被存储为UTC时间戳记,因为IAU不知道我们有多少个闰秒将不得不在未来十年增加(他们随机为好)。 因此,当时间,这将在未来的任何两个日期之间相隔的长度是不知道该怎么一个程序员做日期计算,直到一两年之前? Unix的时间很简单:我们知道2050年1月1日的时间戳已经(即80年代*在一年内循环移位#of秒)。 UTC是极其困难与常年工作,而UNIX时间仅为很难在一个闰秒发生的瞬间工作。

对于它的价值,我从来没有见过一个程序员谁与闰秒一致。 他们应该清楚地废除。



Answer 3:

由于两个其他的答案中含有大量的误导性信息,我会扔这英寸

托马斯是正确的,每天Unix纪元时间戳的秒数是固定的 。 这意味着是,在天那里有一个闰秒,午夜前右二(UTC的时刻的第61届第二午夜前)被赋予相同的时间戳之前的第二位。

这时间戳“重放”,如果你愿意。 所以同样的Unix时间戳将用于两个现实秒。 这也意味着,如果你得到分数UNIX时代,整个第二次将重复。

X86399.0X86399.5X86400.0X86400.5X86400.0X86400.5 ,然后X86401.0

所以UNIX时间不能明确地表示闰秒-闰秒时间戳也是以前的真实世界第二的时间戳。



文章来源: Unix time and leap seconds