V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
7DLNU56W
V2EX  ›  时间

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

  •  
  •   7DLNU56W · 2020-09-13 14:17:39 +08:00 · 4050 次点击
    这是一个创建于 1509 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大家都知道,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 呢?

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

    4 条回复    2020-09-13 15:39:54 +08:00
    jingniao
        1
    jingniao  
       2020-09-13 14:25:22 +08:00
    我没记错的话,是没有对应的时间戳,ntp 时间同步程序,发现时间不一致后,是缓慢同步的正确的时间,所以闰秒附近的每秒会比较长
    explore365
        2
    explore365  
       2020-09-13 14:33:10 +08:00
    靠时间戳计时的不会出问题,不管时间怎么润,时间戳还是默默的 +1s,时间是靠时间戳来转换的。
    yzwduck
        3
    yzwduck  
       2020-09-13 15:26:23 +08:00 via Android
    把闰秒平均分到附近的一段时间内,这种做法叫做 Leap Smear
    Leap Smear 对时间产生的偏差远小于一般计时误差要求,所以依赖时间戳的程序不会遇到问题。
    jim9606
        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,那就不存在闰秒问题了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1367 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 23:45 · PVG 07:45 · LAX 16:45 · JFK 19:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.