clock_t,time_t和struct tm有什么区别?

clock_t,time_t和struct tm有什么区别?

struct 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_ttime_t怎么样?

time_t是绝对时间,表示为自UNIX纪元(GMT午夜,1970年1月1日)以来的整数秒数。 它作为一个时间点的明确,易于使用的表示非常有用。

clock_t是时间的相对测量值,由某个时间点的整数个时钟周期表示(可能是计算机的启动,但没有保证,因为它可能经常滚动)。 每秒有CLOCKS_PER_SEC时钟周期; 这个常数的值可以在不同的操作系统之间变化,但通常在100左右。它有时用于计时目的,但由于其相对较低的分辨率,它并不是很好。 gettimeofdaystruct timeval对于计时目的来说要好得多。

struct tm是日历日期和时间。 它可能不代表任何真正的时间点(例如,你可以有一个struct tm表示它是2月31日,或12月12日)。 它不包括时区,因此它不是绝对的。 它通常在转换为人类可读的日期和时间表示时使用。

time_t表示当前时间 – 通常是自某个时期(例如,1970年1月1日午夜)以来的秒数。 它旨在表示日历/挂钟时间,但仍然易于操作为单个简单的算术类型(例如, difftime可以找到两个指定时间之间的差异)。

clock_t表示自进程启动以来使用的CPU时间量。 可以通过除以CLOCKS_PER_SEC将其转换为秒。 它的真正意图是表示使用的CPU时间,而不是日历/挂钟时间。

struct tm是一个结构(具有指定成员),表示分解为组件的日历/挂钟时间 – 年,月,日,小时,分钟,秒等。它(主要)用作外部接口,而time_t主要用于内部使用 – 即,典型的用途是当您从外部世界获得日期/时间时,将组件放入struct tm并将其转换为time_t以进行内部存储。 然后,当您需要执行诸如显示时间/日期之类的操作时,将time_t转换为struct tm 。 执行该操作的例程包括相当多的情报,例如规范日期,因此2 March 30 February的日期将转换为2 March (或闰年, 1 March )。

C只是说:

(C99,7.23.1p3)“clock_t和time_t是能够表示次数的算术类型”

glibc ,类型time_tlong的别名。

在GNU C库中,time_t等效于long int

来自http://www.gnu.org/software/libc/manual/html_node/Simple-Calendar-Time.html