在闰秒时刻的 Unix 时间戳怎么表示?

2020-09-13 14:17:39 +08:00
 7DLNU56W

大家都知道,Unix 时间戳中是不考虑闰秒的,比如:

UTC 时间 2016 年 12 月 31 日,23 时 59 分 59 秒 对应的 Unix 时间戳为 1483228799

UTC 时间 2017 年 01 月 01 日,00 时 00 分 00 秒 对应的 Unix 时间戳为 1483228800

那么 UTC 时间的 2016 年 12 月 31 日,23 时 59 分 60 秒该如何表示,是没有与其对应的时间戳,还是说延用 1483228799 呢?

这种情况下,依靠时间戳计时的程序在这一时刻会不会出问题?

3806 次点击
所在节点    时间
4 条回复
jingniao
2020-09-13 14:25:22 +08:00
我没记错的话,是没有对应的时间戳,ntp 时间同步程序,发现时间不一致后,是缓慢同步的正确的时间,所以闰秒附近的每秒会比较长
explore365
2020-09-13 14:33:10 +08:00
靠时间戳计时的不会出问题,不管时间怎么润,时间戳还是默默的 +1s,时间是靠时间戳来转换的。
yzwduck
2020-09-13 15:26:23 +08:00
把闰秒平均分到附近的一段时间内,这种做法叫做 Leap Smear
Leap Smear 对时间产生的偏差远小于一般计时误差要求,所以依赖时间戳的程序不会遇到问题。
jim9606
2020-09-13 15:39:54 +08:00
关于这个问题,英文维基给了好几种处理方法( https://en.wikipedia.org/wiki/Unix_time ),简单来说当把 UNIX time 转换为 UTC 时,正闰秒会出现一个 UNIX time 对应两个 UTC time,负闰秒(从未发生)会导致一个 UNIX time 没有对应的 UTC time 。

当然如果你是转换到 TAI,那就不存在闰秒问题了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/706585

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX