1、简介
time.h是c/c++中的日期头文件
struct tm,time_t和clock_t是三个表示时间的数据类型。clock_t用于表示计时时间,得到从程序启动到此次函数调用时累计的毫秒数。 time_t表示某种日历时间。
此外,这里还定义了一个表示本地时间的结构 struct tm,它包含以下结构成员:
Member | Description |
---|---|
int tm_hour |
hour (0 – 23) |
int tm_isdst |
夏令时enabled (> 0), disabled (= 0), or unknown (< 0) |
int tm_mday |
day of the month (1 – 31) |
int tm_min |
minutes (0 – 59) |
int tm_mon |
month (0 – 11, 0 = January) |
int tm_sec |
seconds (0 – 60, 60 = Leap second) |
int tm_wday |
day of the week (0 – 6, 0 = Sunday) |
int tm_yday |
day of the year (0 – 365) |
int tm_year |
year since 1900 |
2、从计算机系统时钟获取时间的方式
(1) time_t time(time_t* timer)
求出当时的日历时间,(从某个确定的时刻开始计时的时间)。如果timer不是NULL,那么同时也通过这个指针赋值,在无法得到有关时间信息时返回-1.
(2) clock_t clock(void)
得到从程序启动到此次函数调用时累计的毫秒数。用clock/CLOCKS_PER_SEC得到的是以秒数计的时间,在无法得到有关时间信息时返回-1.
3、三种时间日期数据类型的转换函数
1)函数原型:struct tm* gmtime(const time_t * timer)
由*timer表示的日历时间出发,转换得到与之对应的国际标准时间,将转换结果存入一个静态的tm结构体变量中,返回这个结构的地址,如果无法表示就返回NULL
time_t t;
struct tm *gmt;
t = time(NULL);
printf("time_t is %s",ctime(&t));
gmt = gmtime(&t);
printf("tm is %s:",asctime(gmt));
2)函数原型:sruct tm* localtime(const time_t* timer)
由*timer表示的日历时间出发,转换为与之对应的本地时间,将其存放在一个静态的tm结构体变量中,返回这一结构体的地址。
time_t t;
struct tm *gmt,*localt;
t = time(NULL);
printf("time_t is %s",ctime(&t));
gmt = gmtime(&t);
printf("gmt is %s",asctime(gmt));
localt = localtime(&t);
printf("localt is %s",asctime(localt));
结果:
上面是三个函数打印的结果,可以对比一下gmtime和locaktime的区别。
3)函数原型:time_t mktime(struct tm * tp)
从结构*tp表示的局部时间转化为与之对应的日历时间,如果不能得到结果就返回-1.
time_t t;
struct tm *tp;
t = time(NULL);
tp = localtime(&t);
printf("tm is %s",asctime(tp));
t = mktime(tp);
printf("time_t is %s",ctime(&t));
4、时间日期数据的格式化函数
1)函数原型:char* asctime(struct tm * tp)
由结构*tp表示的时间输出为字符串,结果格式为"Www Mmm dd hh:mm:ss yyyy",即“周几 月份数 日数 小时数:分钟数:秒数 年分数”(最后有一个 换行字符和表示字符串结束的空字符,也保存在字符变量里:Sun Oct 4 18:00:00 1998\n\0)
2)函数原型:char* ctime(const time_t * timet)
把日历时间time_t输出到字符串,输出格式与asctime一样,等价于asctime(localtime(tp))
5、time函数介绍
1)函数原型:double difftime(time_t t2, time_t t1)
参数说明:t1为机器时间开始时间,t2为机器时间结束时间
函数功能:求出两个日历时间的差,以秒计算
函数返回:时间差,单位为秒
time_t t1 , t2;
t1 = time(NULL);
Sleep(1000);
t2 = time(NULL);
printf("Difftimeis:%f",difftime(t2,t1));
注:使用Sleep时应该包含"Windows.h"和"dos.h"头文件