大家都知道,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 呢?
这种情况下,依靠时间戳计时的程序在这一时刻会不会出问题?
1
jingniao 2020-09-13 14:25:22 +08:00
我没记错的话,是没有对应的时间戳,ntp 时间同步程序,发现时间不一致后,是缓慢同步的正确的时间,所以闰秒附近的每秒会比较长
|
2
explore365 2020-09-13 14:33:10 +08:00
靠时间戳计时的不会出问题,不管时间怎么润,时间戳还是默默的 +1s,时间是靠时间戳来转换的。
|
3
yzwduck 2020-09-13 15:26:23 +08:00 via Android
把闰秒平均分到附近的一段时间内,这种做法叫做 Leap Smear
Leap Smear 对时间产生的偏差远小于一般计时误差要求,所以依赖时间戳的程序不会遇到问题。 |
4
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,那就不存在闰秒问题了。 |