使用 tm 结构时如何检测是否有闰秒?
How to detect if there is a leap second when using the tm struct?
根据这个 struct tm
documentation,值 tm_sec
可以是 0 - 61
并且额外的范围是在某些系统中包括闰秒。我如何检测系统中是否存在闰秒,特别是在我的 openSUSE 13.2 机器中?
闰秒与特定系统不相关。它甚至不是直接的信息问题,而是物理问题。
在理想世界中,每个时钟都非常准确,没有理由使用闰秒。但在我们受限的世界里,时钟往往会偏离。
移动系统时间,特别是向后移动会导致不好的事情发生。如果批处理任务存储其最后一个时间 运行 知道哪些文件已经被处理,并且 因为时钟向后移动 它认为现在时间早于它的最后一个 运行, 它将再次处理可能完全错误的文件。
出于这个原因,系统开发人员发明了闰秒,允许系统调整其系统时钟(当然只是轻微的增量,但如果您定期检查时钟通常就足够了)而无需移动它向后。
如@Supuhstar 所述,这只是闰秒的操作系统实现。但是闰秒有一个真正的物理起源,并且被引入以补偿时间 UTC 和 TAI 的两个定义之间的变化 - 地球自转速度的物理变化。我在另一个 post of mine
中提供了更多详细信息
根据这个 struct tm
documentation,值 tm_sec
可以是 0 - 61
并且额外的范围是在某些系统中包括闰秒。我如何检测系统中是否存在闰秒,特别是在我的 openSUSE 13.2 机器中?
闰秒与特定系统不相关。它甚至不是直接的信息问题,而是物理问题。
在理想世界中,每个时钟都非常准确,没有理由使用闰秒。但在我们受限的世界里,时钟往往会偏离。
移动系统时间,特别是向后移动会导致不好的事情发生。如果批处理任务存储其最后一个时间 运行 知道哪些文件已经被处理,并且 因为时钟向后移动 它认为现在时间早于它的最后一个 运行, 它将再次处理可能完全错误的文件。
出于这个原因,系统开发人员发明了闰秒,允许系统调整其系统时钟(当然只是轻微的增量,但如果您定期检查时钟通常就足够了)而无需移动它向后。
如@Supuhstar 所述,这只是闰秒的操作系统实现。但是闰秒有一个真正的物理起源,并且被引入以补偿时间 UTC 和 TAI 的两个定义之间的变化 - 地球自转速度的物理变化。我在另一个 post of mine
中提供了更多详细信息