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

Cri*_*sti 16 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;
};
Run Code Online (Sandbox Code Playgroud)

但是clock_ttime_t怎么样?

dus*_*uff 29

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

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

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

  • “表示为自 UNIX 纪元(格林尼治标准时间午夜,1970 年 1 月 1 日)以来的整数秒数。” 很常见,但不是由 C 定义的。 `time_t` 可以是 `double` 并引用 1970 年 1 月 1 日以外的其他纪元。 (2认同)
  • @Qqwy UNIX 没有充分指定类型范围,所以我们有 [2038 问题](http://en.wikipedia.org/wiki/Year_2038_problem) 以及忽略那些真实的,如果讨厌,[闰秒](https ://en.wikipedia.org/wiki/Leap_second)。 (2认同)

Jer*_*fin 6

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

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

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