time.h定义了3个宏。第1个宏是表示空指针的NULL,许多其他头文件中也定义了这个宏。第2个宏是CLOCKS_PER_SEC,该宏除以clock()的返回值得以秒为单位的时间值。第3个宏(C11)是TIME_UTC,这是一个正整型常量,用于指定协调世界时(即UTC)。该宏是timespec_get()函数的一个可选参数。UTC是目前主要世界时间标准,作为互联网和万维网的普通标准,广泛应用于航空、天气预报、同步计算机时钟等各领域。
| time.h中定义的类型 | |
| 类型 | 描述 |
| size_t | sizeof运算符返回的整数类型 |
| clock_t | 适用于表示时间的算术类型 |
| time_t | 适用于表示时间的算术类型 |
| struct timespec | 以秒和纳秒为单位储存指定时间间隔的结构(C11) |
| struct tm | 储存日历时间的各部分 |
| timespec结构中的成员 | |
| 成员 | 描述 |
| time_t tv sec | 秒(>=0) |
| long tv_nsec | 纳秒([0, 999999999]) |
| struct tm结构中的成员 | |
| 成员 | 描述 |
| int tm_sec | 分后的秒(0-61) |
| int tm_min | 小时后的分(0-59) |
| int tm_hour | 小时(0-23) |
| int tm_mday | 一个月的天数(0-31) |
| int tm_mon | 一月后的月数(0-11) |
| int tm_year | 1900年后的年数 |
| int tm_wday | 星期日开始的天数(0-6) |
| int tm_yday | 从1月1日开始的天数(0-365) |
| int tm_isdst | 夏令时标志(大于0说明夏令时有效,等于0说明无效,小于0说明信息不可用) |
| 时间函数 | |
| 成员 | 描述 |
|
clock_t clock(void) |
该函数返回实现从开始执行程序到调用该函数时,处理器经过的最接近的时间。该函数的返回值除以CLOCK_PER_SEC得到以秒为单位的时间。如果时间不可用或无法表示,函数返回(clock_t)(-1) |
|
double difftime(time_t t1, time_t t0) |
返回两个日历时间(t1-t0)的差值。该函数返回计算结果,单位是秒 |
|
time_t mktime(struct tm *tmptr) |
把tmptr指向的结构中的分解时间转换为日历时间。其编码与time()函数相同,但是结构变了,以便对结构中超出范围的值进行调整(例如,2分100秒会调整为3分40秒),而且把tm_wday和tm_yday设置为其他成员指定的值。如果无法表示日历时间,该函数返回(time_t)(-1);否则以time_t格式返回日历时间。 |
|
time_t time(time_t *ptm) |
返回当前日历时间,并将其储存在ptm指向的位置,假设ptm不是空指针。如果日期时间不可用,该函数返回(time_t)(-1) |
|
int timespec_get(struct timespec *ts, int base) |
根据指定的时基,把ts指向的结构设置为当前日历时间。如果成功,返回base(非0值),否则返回0(C11) |
| char *asctime(const struct tm *tmpt) |
把tmpt指向的结构中的分解时间转换成Thu Feb 26 13:14:33 1998\n\0格式的字符串,并返回指向该字符串的指针 |
| char *ctime(const time_t *ptm) |
把ptm指向的结构中的分解时间转换成 Wed Aug 11 10:48:24 1999\n\0格式的字符串,并返回指向该字符串的指针 |
| struct tm *gmtime(const time_t *ptm) |
把ptm指向的日历时间转换成协调世界时(UTC)表示的分解时间,返回一个指向结构的指针,该结构中储存时间信息。如果UTC不可用,则返回NULL |
| struct tm* localtime(const time_t *ptm) |
把ptm指向的日历时间转换成本地时间表示的分解时间,储存tm结构并返回指向该结构的指针。 |
|
size_t strftime(char *restrict s, size_t max const char *restrict fmt, const struct tm *restrict tmpt) |
把字符串fmt拷贝到字符串s中,用tmp指向的分解时间结构中的合适数据替换fmt中的转换说明。最多在s中放入max个字符。该函数返回放入s中的字符数(不包括空格);如果字符串中的字符数大于max,函数返回0,且s中的内容不确定。 |
| strftime()函数中使用的转换说明 | |
| 转换说明 | 被替换为 |
| %a | 本地化的星期名称缩写 |
| %A | 本地化的星期名称全名 |
| %b | 本地化的月份名称缩写 |
| %B | 本地化的月份名称全名 |
| %c | 本地化指定的日期和时间 |
| %C | 年份的后两位数字(年份除以100,取小数部分的数)(00-99) |
| %d | 十进制数表示的月份中的某天(01-31) |
| %D | 月/日/年,等份于“%m%d%y” |
| %e | 十进制数表示的月份中的某天,在仅一位的数字前有一个空格(1-31) |
| %F | 年-月-日,等份于“%Y-%m-%d” |
| %g | 基于周的年份的最后两位数字(00-99) |
| %G | 十进制数表示的基于周的年份 |
| %h | 等价于“%b” |
| %H | 十进制数(00-23)表示的小时(24小时制) |
| %I | 十进制数(01-12)表示的小时(12小时制) |
| %j | 十进制数表示的一年中的某天(001-366) |
| %m | 十进制数表示的月份(01-12) |
| %n | 换行符 |
| %M | 十进制数表示的分钟(00-59) |
| %p | 等价于本地12小时制中的am/pm |
| %r | 本地的12小时制 |
| %R | 小时:分钟,等价于"%H:%M" |
| %S | 十进制数表示的秒(00-61) |
| %t | 水平制表符 |
| %T | 小时:分钟:秒,等价于“%H:%M:%S” |
| %u | ISO 8601的星期数(1-7),星期一为1 |
| %U | 一年中的周数(00~53),把星期天作为一周的第1天 |
| %V | ISO 8601的一年周数(00~53),把星期天作为一周的第1天 |
| %w | 十进制表示的星期数(0~6),从星期天开始 |
| %W | 一年的周数(00~53),把星期一作为一周的第1天 |
| %x | 本地化日期表示 |
| %X | 本地化时间表示 |
| %y | 不带世纪的十进制年份(00~99) |
| %Y | 带世纪的十进制年份 |
| %z | 按照ISO 8601格式的相对UTC偏移(“-800”表示格林威治时间后的8小时,即是向西8小时),如果无可用信息则无替换字符 |
| %Z | 时区名,如果无可用信息则无替换字符 |
| %% | %(即百分号) |