time.h¶
time.h 头文件提供了与时间日期相关的类型, 函数, 结构体.
类型¶
-
time_t
¶ time_t 是适合存储时间的类型, 一般为 unsigned int. 是
time()
的返回值的类型.time.h 中声明的许多函数都会接受一个名为 timer 的 time_t 类型参数.
-
clock_t
¶ 适合于存储处理器计时的类型. 一般为 long int.
-
struct
tm
¶ 一个存储时间日期信息的结构体. 由
localtime()
返回. 具有以下成员:-
int
tm_year
¶ 年. 注意, 是从 1900 年开始计算的. 例如, 若得到的值为 119, 则实际上表示 2019 年.
-
int
tm_mon
¶ 月. 范围 0~11. 是从 0 开始计算的. 需要注意.
-
int
tm_mday
¶ 在某月的第几日. 范围 1~31. 除了这个成员, 其他都是从 0 开始计算.
-
int
tm_wday
¶ 在某一周的第几日. 范围 0~6.
-
int
tm_yday
¶ 在某一年的第几日. 范围 0~365.
-
int
tm_hour
¶ 二十四小时制. 0~23.
-
int
tm_min
¶ 分钟. 0~59.
-
int
tm_sec
¶ 秒. 0~59.
-
int
tm_isdst
¶ 是否为夏令时. 返回 1 或 0.
下面两个成员在定义了
__USE_MISC
后才会被定义.-
char*
tm_zone
¶ 显示当前时区.
-
long int
tm_gmtoff
¶ 与 UTC (太平洋标准时间) 相差的秒数. 东为正, 西为负.
-
int
函数¶
-
clock_t
clock
(void)¶ 返回从程序开始运行到此时的 CPU 时钟数. 进程挂起的时间不计算在内.
算式 返回值 /
CLOCKS_PER_SEC
将数值单位转化为秒.
-
time_t
time
(time_t* timer)¶ 返回当前系统时间. (Unix 时间戳). 如果指针 timer 不是 NULL, 则会将返回值存储在 timer 中.
参数: - timer (time_t*) – time_t 的指针.
-
double
difftime
(time_t time1, time_t time0)¶ 返回 time1 - time0 的值. 单位为秒.
-
size_t
strftime
(char *str, size_t maxsize, char *fmt, struct tm *tp)¶ 根据 fmt 将 tm 结构体转化为字符串.
格式字符串支持的转义符号:
符号 含义 举例 %Y 年 2019 %m 月 (01-12) 03 %d 日 (01-31) 07 %H 时 (00-23) 00 %M 分 (00-59) 07 %S 秒 (00-59) 55 %A 星期名称 Thursday %a 星期缩写 Thu %B 月份名称 March %c 完整的日期时间表示 %I 12 小时制小时 (01-12) 12 %j 一年的第几天 (01-366) %p AM 或 PM AM %U 一年的第几周 (00-53) 以第一个星期日开始 %w 一周的星期几 (0-6) 4 %W 一年的第几周 (00-53) 以第一个星期一开始 %x 日期 07/03/19 %X 时间 00:18:22 %y 年份, 后两位. 19 %Z 时区. 参数: - str (char *) – 将生成的字符串存入目标字符数组.
- maxsize (size_t) – 最大可写入的字符数, 一般传入字符数组的长度.
- fmt (char *) – 格式字符串.
- tp (struct
tm
*) – 存储日期时间信息的 tm 结构体.
返回: 如果写入的字符数(包括结束符)小于 maxsize, 则返回去除结束符的写入字符数. 否则返回 0.
返回类型: size_t
示例¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | #include <stdio.h>
#include <time.h>
#ifdef _WIN32
#include <Windows.h>
#define sleep(ms) Sleep((ms) * 1000)
/**
* 挂起操作和操作系统有关,
* 而且 GCC 与 MSVC 分别使用秒和毫秒
*/
#else
#include <unistd.h>
#endif /* _WIN32 */
void show_struct_tm(void)
{
time_t timer;
struct tm* date;
time(&timer);
date = localtime(&timer);
printf("year is %d\n", date->tm_year);
printf("mon is %d\n", date->tm_mon);
printf("mday is %d\n", date->tm_mday);
printf("wday is %d\n", date->tm_wday);
printf("yday is %d\n", date->tm_yday);
printf("hour is %d\n", date->tm_hour);
printf("min is %d\n", date->tm_min);
printf("sec is %d\n", date->tm_sec);
printf("isdst is %d\n", date->tm_isdst);
// GLIBC 才包含以下两个成员, 非 C 标准.
// printf("zone is %s\n", date->tm_zone);
// printf("gmtoff is %ld\n", date->tm_gmtoff);
printf("::::%s\n\n", __func__);
}
void show_clock_per_sec(void)
{
clock_t clocker;
clocker = clock();
printf("clock: %ld\n", clocker);
printf("CLOCKS_PER_SEC = %ld\n", CLOCKS_PER_SEC);
printf("::::%s\n\n", __func__);
}
void show_difftime(void)
{
time_t a, b;
time(&a);
sleep(3);
time(&b);
printf("TIME1 - TIME2 = %lf\n", difftime(b, a));
printf("::::%s\n\n", __func__);
}
void show_strtime(void)
{
time_t timer;
struct tm *tp;
char buffer[255] = {'\0'};
time(&timer);
tp = localtime(&timer);
strftime(buffer, 255, "%Y-%m-%d %H:%M:%S", tp);
printf("%s:::: %s\n", "%Y-%m-%d %H:%M:%S", buffer);
strftime(buffer, 255, "%c", tp);
printf("%s:::: %s\n", "%c", buffer);
strftime(buffer, 255, "%x, %X", tp);
printf("%s:::: %s\n", "%x, %X", buffer);
strftime(buffer, 255, "%y", tp);
printf("%s:::: %s\n", "%y", buffer);
strftime(buffer, 255, "%I %p", tp);
printf("%s:::: %s\n", "%I %p", buffer);
strftime(buffer, 255, "%A, %a, %B", tp);
printf("%s:::: %s\n", "%A, %a, %B", buffer);
strftime(buffer, 255, "%Z", tp);
printf("%s:::: %s\n", "%Z", buffer);
printf("::::%s\n\n", __func__);
}
int main(int argc, char* argv[])
{
show_struct_tm();
show_clock_per_sec();
show_difftime();
show_strtime();
return 0;
}
|