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 | 时区名,如果无可用信息则无替换字符 |
%% | %(即百分号) |