clock_t、time_t 和 struct tm 有什么区别?
结构 tm看起来像这样:
struct tm{
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
};
但是clock_t和time_t长什么样子呢?
time_t
是一个绝对时间,表示为自 UNIX 纪元(格林威治标准时间午夜,1970 年 1 月 1 日)以来的整数秒数。它作为一个时间点的明确、易于使用的表示非常有用。
clock_t
是时间的相对度量,由某个时间点以来的整数时钟滴答数表示(可能是计算机的启动,但不能保证,因为它可能会经常翻转)。CLOCKS_PER_SEC
每秒有时钟滴答;这个常数的值在不同的操作系统之间可能会有所不同,但通常在100左右。有时用于计时目的,但由于分辨率相对较低,因此不太擅长。gettimeofday
'sstruct timeval
对于计时目的要好得多。
struct tm
是日历日期和时间。它可能不代表任何真实的时间点(例如,您可以有一个struct tm
说它是 2 月 31 日或 12 月 0 日)。它不包括时区,因此不是绝对的。它通常在转换为日期和时间的人类可读表示或从其转换时使用。
time_t
表示当前时间——通常是自某个时期以来的秒数(例如,1970 年 1 月 1 日午夜)。它旨在表示日历/挂钟时间,但仍然易于作为单一的简单算术类型进行操作(例如,difftime
可以找到两个指定时间之间的差异)。
clock_t
表示自进程启动以来使用的 CPU 时间量。它可以通过除以 CLOCKS_PER_SEC 转换为秒。它的真正意图是表示使用的 CPU 时间,而不是日历/挂钟时间。
struct tm
是一个结构(具有指定的成员),表示分解为组件的日历/挂钟时间 - 年、月、日、小时、分钟、秒等。它(主要)用作外部接口,而 atime_t
用于主要用于内部使用——即,典型用途是当您从外部世界获取日期/时间时,您将组件放入 astruct tm
并将其转换为 atime_t
用于内部存储。然后,当您需要执行诸如显示时间/日期之类的操作时,您可以time_t
将struct tm
. 进行这种操作的例程包括相当多的智能来执行诸如标准化日期之类的事情,因此日期 like30 February
将被转换为2 March
(或闰年1 March
)。
C只是说:
(C99, 7.23.1p3) “clock_t 和 time_t 是能够表示时间的算术类型”
在 中glibc
,类型time_t
是 的别名long
。
在 GNU C 库中,time_t 等价于 long int
来自http://www.gnu.org/software/libc/manual/html_node/Simple-Calendar-Time.html