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_t 和 time_t 的外观如何?
答案 0 :(得分:29)
time_t
是一个绝对时间,表示为自UNIX纪元(GMT午夜,1970年1月1日)以来的整数秒数。它可以作为一个明确的,易于使用的时间点表示。
clock_t
是时间的相对测量值,由某个时间点的整数个时钟周期表示(可能是计算机的启动,但没有保证,因为它可能经常滚动)。每秒有CLOCKS_PER_SEC
个时钟周期;这个常数的值可以在不同的操作系统之间变化,但通常在100左右。它有时用于计时目的,但由于其相对较低的分辨率,它并不是很好。 gettimeofday
的{{1}}在计时方面要好得多。
struct timeval
是日历日期和时间。它可能不代表任何真正的时间点(例如,你可以有struct tm
表示它是2月31日,或12月12日)。它不包括时区,因此它不是绝对的。它通常在转换为人类可读的日期和时间表示时使用。
答案 1 :(得分:5)
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
。执行该操作的例程包括相当多的情报,例如规范日期,因此30 February
之类的日期将转换为2 March
(或在闰年,1 March
)。
答案 2 :(得分:3)
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