使用 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

中提供了更多详细信息