我在我的机器上使用的是ubuntu 18.04。我的ntp被配置为使用gpsd作为源。gpsd提供的时间不考虑闰秒,但NTP对其进行调整,并向UTC提供调整后的闰秒。所以我的系统时钟将由NTP同步到UTC。从文档中,std::chrono::system_clock::now
提供了1970年以来的时间,不计算闰秒。我的问题是,当我们这样做的时候,内核会调整闰秒吗?或者,从std::chrono::system_clock::now
查询的时间实际上包含来自NTP的相同时间,而NTP已经调整了闰秒。
发布于 2019-11-16 08:36:23
system_clock
和NTP都以同样的方式“处理”闰秒。时间只是在插入闰秒时停止。这里我说的是时间标准,而不是任何特定的实现。
在闰秒插入期间,NTP的实现可能不会停止一秒钟。相反,它可能会将自己延迟几个小时,无论是在闰秒插入之前还是之后,这样所有延迟的总和都是1秒。这就是所谓的“闰秒涂片”。
所以你可以说system_clock
和NTP都忽略了闰秒,如果在这些系统中有两个时点t0
和t1
,如果t0
引用了闰秒插入之前的时间,而t1
引用了那个闰秒插入之后的时间,那么t1-t0
表达式就会给出一个不计算插入的闰秒的结果。结果比实际显示的物理秒数少1。
GPS卫星“忽略”闰秒的方式与system_clock
和NTP完全不同。全球定位系统的“时钟”不停地滴答滴答地跳过一秒钟,几乎完全无视它。然而,GPS周总是精确604,800秒(86,400 * 7),即使在世界协调时插入了闰秒。
因此,要将GPS周(和一周中的GPS时间)转换为UTC,必须知道自GPS时代(1980年1月的第一个星期日)以来所插入的闰秒的总数。我相信,当gpsd为您提供一个UTC时间点时,它会为您完成此转换。
https://stackoverflow.com/questions/58886706
复制相似问题