摘要:编程中经常用到时间表达及转换的函数,它们都定义在 time.h 库函数中。其中time函数可以得到当前日历时间或者设置日历时间。今天主要是以实际的例子介绍time函数。
编程中经常用到时间表达及转换的函数,它们都定义在 time.h 库函数中。其中time函数可以得到当前日历时间或者设置日历时间。今天主要是以实际的例子介绍time函数。
1.时间相关基础知识
(1)世界标准时间Coordinated Universal Time(UTC):
协调世界时,又称世界标准时间,也即格林威治标准时间(Greenwich Mean Time,GMT),中国内地的时间与UTC得时差为+8,也即UTC+8,美国为UTC-5。
(2)日历时间:
日历时间,是用"从一个标准时间点到此时的时间经过的秒数"来表示的时间。标准时间点对不同编译器可能会不同,但对一个编译系统来说,标准时间是不变的。一般是表示距离UTC时间 1970-01-01 00:00:00的秒数。
(3)时间点:
时间点。在标准c/c++中是一个整数,用此时的时间和标准时间点相差的秒数(即日历时间)来表示。
(4)时钟计时单元:
时钟计时单元(而不叫做时钟滴答次数),一个时钟计时单元的时间长短是由cpu控制的,一个clock tick不是cpu的一个时钟周期,而是c/c++的一个基本计时单位。
2.time函数
(1)函数原型
函数原型: time_t time(time_t *timer)(1)参数说明: timer=NULL时得到当前日历时间(从1970-01-01 00:00:00到现在的秒数),timer=时间数值时,用于设置日历时间,time_t是一个unsigned long类型。如果 timer不为空,则返回值也存储在变量 timer中。(2)函数功能: 得到当前日历时间或者设置日历时间(3)函数返回: 当前日历时(2)time.h头文件
要使用time,必须在程序中包含头文件。
(3)time.h 的定义
time.h 头文件定义了四个变量类型、两个宏和各种操作日期和时间的函数。
4个变量size_t 是无符号整数类型,它是 sizeof 关键字的结果。clock_t 这是一个适合存储处理器时间的类型,类型为unsigned longtime_t 这是一个适合存储日历时间类型。struct tm 这是一个用来保存时间和日期的结构。tm 结构的定义如下:
struct tm{int tm_sec; /* 秒,范围从 0 到 59 */int tm_min; /* 分,范围从 0 到 59 */int tm_hour; /* 小时,范围从 0 到 23 */int tm_mday; /* 一月中的第几天,范围从 1 到 31 */int tm_mon; /* 月,范围从 0 到 11(注意) */int tm_year; /* 自 1900 年起的年数 */int tm_wday; /* 一周中的第几天,范围从 0 到 6 */int tm_yday; /* 一年中的第几天,范围从 0 到 365 */int tm_isdst; /* 夏令时 */};两个宏
NULL 这个宏是一个空指针常量的值。CLOCKS_PER_SEC 这个宏表示每秒的处理器时钟个数。用于将clock函数的结果转化为以秒为单位的量,这个量的具体值是与操作系统相关的,通常为1000。(4)time函数使用示例
a.time函数有两种使用方式:
t1=time(NULL)或t1=time(0)将空指针传递给time函数,并将time返回值赋给变量t1
b. time(&t2);将变量t2的地址作为实参传递给time函数,函数自动把结果传递给t2,不需要额外的赋值语句。
3.实例
程序
#include #include int main {time_t sec,sec1,sec2;/*函数原型: time_t time(time_t *timer)*/sec = time(NULL);printf("自 1970-01-01 起的小时数 = %ld\n", sec/3600);printf("自 1970-01-01 起的天数 = %ld\n", (sec/3600)/24);printf("自 1970-01-01 起的年数 = %ld\n", (sec/3600)/24/365);sec1 = time(0);printf("自 1970-01-01 起的小时数 = %ld\n", sec1/3600);printf("自 1970-01-01 起的天数 = %ld\n", (sec1/3600)/24);printf("自 1970-01-01 起的年数 = %ld\n", (sec1/3600)/24/365);time(&sec2);printf("自 1970-01-01 起的小时数 = %ld\n", sec2/3600);printf("自 1970-01-01 起的天数 = %ld\n", (sec2/3600)/24);printf("自 1970-01-01 起的年数 = %ld\n", (sec2/3600)/24/365); getchar;return(0);}运行结果
4.参考内容
作 者 | 郭志龙
来源:小米课堂