函数clock_gettime
是否返回以UTC或本地时区的纪元测量的时间戳?
我知道time
应该来自UTC时代,但我找不到任何引用说clock_gettime
也是如此。
答案 0 :(得分:15)
引用维基百科,Unix时代为defined为
1970年1月1日(或1970-01-01T00:00:00Z ISO 8601)的时间00:00:00 UTC 。
由此可见,对“时代”的任何提及都意味着UTC。
答案 1 :(得分:6)
实际上,这个问题没有多大意义。有关时间相关功能的概述,请参阅time(7)。
任何时钟设备都会返回过去某个原点事件测量的时间。 Unix(和Posix)约定是从Epoch(1970年开始,aix's answer解释)来衡量它。
以UTC或当地时间显示某些时间,或使用法国革命日历,或使用Maya日历,或您感兴趣的任何文化中的任何其他日历,都不会改变时间。只有那个时间的显示(或显示的形式)会改变。
有点像说两个, deux , 1 + 1 或 2 ,或者10b -with b 表示二进制 - 是相同编号的所有表示。
回到问题,man page of clock_gettime给出了问题的准确答案。这取决于您要求的 clk_id
,对于CLOCK_REALTIME
,时间是从Unix Epoch开始计算的。对于其他时钟(例如CLOCK_MONOTONIC
),未指定使用的原点。
(我对这里的问题数量感到非常惊讶,这些问题可以通过查看 man 来快速回答。我不明白人们花更多时间去问问题的逻辑这里要问一下 - 只需在他们的Linux机器上输入man clock_gettime
- 进入手册页。)
时区概念仅与localtime&返回的struct tm
相关。 gmtime
(及相关)功能。从Epoch(例如time(2),gettimeofday,time_t
clock_gettime
的结果)测量的时间(例如,某些CLOCK_REALTIME
)没有时区。< / p>
Unix Epoch是1970年1月1日0:00 UTC(根据(time_t)0
的定义),在我的时区(MET = Paris / France),相同的Epoch是Thu Jan 1 01:00:00 MET 1970年。
答案 2 :(得分:0)
取决于......
如果你打电话给clock_gettime(1)
,很可能,你的linux已经开始了。
答案 3 :(得分:0)
只是为了充实这些答案:
clock_gettime()
,POSIX 标准函数采用时钟标识符的第一个参数。
在撰写本文时,一个通用标识符是 CLOCK_REALTIME
,它确实获取 UTC 纪元时间 - 假设 UNIX 时钟设置正确。
还有 CLOCK_MONOTONIC
,它是从过去未指定时间点设置的时钟。通常,我已经看到这是在进程调用后随着时间的推移而实现的。
以及强制性示例:
struct timespec epochTime;
struct timespec otherTime;
// fetch the system time in UTC
clock_gettime( CLOCK_REALTIME, &epochTime ); // CLOCK_REALTIME returns 1970 Epoch Time
// Fetch some equally-valid time, but with an unknown start
// But relative comparisons are absolutely OK
clock_gettime( CLOCK_MONOTONIC, &otherTime );