C语言笔记:time.h标准库操作时间相关问题

原文链接: http://c.biancheng.net/c/

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;
}

输出结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42124234/article/details/101974116