在linux中使用mktime函数的时间差异

Posted

技术标签:

【中文标题】在linux中使用mktime函数的时间差异【英文标题】:Difference in Time Using mktime function in linux 【发布时间】:2013-10-24 23:37:41 【问题描述】:

假设我有 2 个不同的输入时间。 Time-1 是2013-10-01-00-00-00,Time-2 是2000-01-01-12-00-00

我已将上述两次填充到struct tm 结构中。我使用了mktime 并通过了两个结构并得到了type time_t 的两个不同值。让我们分别是 Time_1 和 Time_2。

现在如果我取 Time_1 和 Time_2 的差,

    是否包括两个输入时间 Time-1 之间经过的秒数 和时间 2? 函数是否在内部为跳跃处理额外的秒数 年? 要获得 UTC 方面的实际差异,我需要 加/减闰年?

【问题讨论】:

【参考方案1】:

闰年是多出一天的年份。所有 Posix 时间函数都能完美处理这些问题。

国际地球自转和参考系统服务会不时在 UTC 中插入或删除“闰秒”。 Posix 时间函数都不知道闰秒。

因此,如果您关心闰秒,您需要自己考虑它们。如果您只对通常所说的闰年感兴趣,不用担心。

【讨论】:

非常感谢您的回复。但是先生,您可以发布任何官方链接,声称 posix 时间函数可以处理闰年。 mktime 将本地时间转换为从 Epoch 开始的秒数。 (pubs.opengroup.org/onlinepubs/9699919799/basedefs/…)。为了使其正确,必须考虑闰年。如果没有,它将计算自纪元以来的错误秒数。显然,两个“自纪元以来的秒数”值之间的差异是两个值之间的秒数。 非常感谢先生。现在又多了一个疑问。上述函数中每秒计数的分辨率是多少? O/S 如何达到每秒计数?如果系统同步到 NTP 服务器,对每秒计数有影响吗? @Soumajit:分辨率未定义,但在所有主要操作系统上都是秒。操作系统如何设法跟踪时间也没有标准化,但 NTP 服务器很常见。通常,操作系统通过“涂抹”漂移来与时间服务器同步:它每秒增加或减少少量,直到时间再次同步。系统时钟的突然变化会导致时间似乎倒退,而笨拙的系统管理员可能会做出突然的改变。但是,这些都不会影响从另一个完全指定的时间中减去一个完全指定的时间的准确性。 再次感谢先生。假设我有 2 个不同的 linux ( RHEL ) 系统,我正在观察前面问题中提到的 Time-1 和 Time-2 的差异。现在让我们假设其中一个系统没有与 NTP 同步。但其他系统同步到 NTP 服务器。两个系统之间的秒数差异会有所不同吗?如何确定我用于计算的 posix 函数(在本例中为 mktime)使用的每秒分辨率是多少?

以上是关于在linux中使用mktime函数的时间差异的主要内容,如果未能解决你的问题,请参考以下文章

linux系统的进程运转方式

mktime 返回不正确的值

通过 PHP mktime() 创建日期

在 Linux 下使用 gcc 在 C 中的夏令时和 mktime

使用 <ctime> mktime 的有效日期函数

时间函数date(),mktime(),strtotime()