time.h文件与时间相关的数据类型和函数
在C语言的头文件time.h中,定义了日期和时间的数据类型以及函数。C语言中有两种方式表示时间日期的值:time_t类型和struct tm类型。
以下是time.h头文件的常用的时间数据类型截图:
typedef long clock_t;
typedef _int32 _time32_t;
typedef _time32_t time_t;
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】(0表示1月,所以编程中常常对其加1)
int tm_year; //年份,其值等于实际年份减去1900(实际年份需要对其加1900)
int tm_wday; //星期取值区间为【0,6】,其中0表示星期天,1表示星期一
int tm_yday; //从每年1月1日开始的天数,其中0表示1月1日
int tm_isdst; //夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负。
};
以下是time.h头文件的常用的时间函数原型截图:
一、
time_t __cdecl time(time_t *_Time);//返回从1970-1-1,00:00:00到现在经历的秒数
time_t是一个long类型的值(typedef重命名),一般不能根据其值确定具体的年、月、日等数据。但是却可以通过time()函数获得time_t类型的计算机系统当前的日历时间。time()传入一个time_t的指针变量,该变量的内容经过运算就变位秒数。当然它也可以返回一个相同秒数内容的值赋值给另一个time_t类型变量,两个变量的内容都相等。
(日历时间:是用“从一个标准时间点到此时的时间经过的秒数”来表示的时间。日历时间(Calendar Time)是通过time_t数据类型来表示的,用time_t表示的时间(日历时间)是从一个时间点(例如:1970年1月1日0时0分0秒)到此时的秒数。)
二、
struct tm *__cdecl localtime(const time_t *_Time)
将time()返回的秒数数值转换成本地时间,同时考虑本地时区和夏令时标志。将上面time()函数随便一个time_t类型变量取地址当做实参传入该函数,然后返回一个指向struct tm类型的结构体指针类型,接着再用指针成员运算费“->”取出 年-月-日 时:分:秒
三、
char *__cdecl asctime(const struct tm *_Tm)//将结构体指针*_Tm所指向的结构体转换为字符串形式
与
char *__cdecl ctime(const time_t *_Time)//将time_t类型指针*_Tm指向的日历时间转换为字符串形式
实现效果相同:都是将时间转换成字符串形式,两个函数等价。
两者的区别是:asctime()函数传入的实参是localtime()的返回值;ctime()函数传入的参数是time()的返回值。
四、
struct tm *__cdecl gmtime(const time_t *_Time)//返回的时间日期未经时区转换,是UTC时间(又称世界时间,即格林尼治时间)
与localtime()功能相同,实参传入time()返回的一个struct tm类型指针,在此基础上还需要asctime()函数将指向的结构体转换成字符串形式,然后打印输出。
代码实例
#include <stdio.h>
#include <time.h>//定义了日期和时间的数据类型以及函数
int main(void)
{
time_t now,t1;
t1=time(&now);
printf("当前的日历时间:%u秒(距离1970年1月1日0时的秒数)\n",t1);
struct tm *localtp;
localtp=localtime(&now);
printf("本地时间是:%d年%d月%d日 %d:%d:%d\n",localtp->tm_year+1900,localtp->tm_mon+1,localtp->tm_mday,localtp->tm_hour,localtp->tm_min,localtp->tm_sec);
printf("以asctime函数呈现本地时间:%s",asctime(localtp));
printf("以ctime函数呈现本地时间:%s",ctime(&now));
struct tm *gmtp;
gmtp=gmtime(&now);
printf("UTC时间:%s",asctime(gmtp));
return 0;
}
输出结果: