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

时间:2012-09-02 21:58:03

标签: c time struct time-t time.h

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 的外观如何?

3 个答案:

答案 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_tlong的别名。

  

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

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