C的时间库time

C的时间库time

C++的时间类,还是比较的蹩脚的,很多还得依赖于C的时间库。先写一下C的时间库的使用。

头文件:time.h
定义的变量类型有四个:
库变量
下面是头文件 time.h 中定义的变量类型:

序号变量描述
1size_t是无符号整数类型unsigned int,它是 sizeof 关键字的结果。
2clock_t这是一个适合存储处理器时间的类型。
3time_t is这是一个适合存储日历时间类型。就是一个long long类型
4struct 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;       /* 夏令时                */
};

库宏

下面是头文件 time.h 中定义的宏:

序号描述
1NULL这个宏是一个空指针常量的值。
2CLOCKS_PER_SEC这个宏表示每秒的处理器时钟个数。

函数

库函数
下面是头文件 time.h 中定义的函数:

序号函数描述
1char *asctime(const struct tm *timeptr)返回一个指向字符串的指针,它代表了结构 timeptr 的日期和时间。
2clock_t clock(void)返回程序执行起(一般为程序的开头),处理器时钟所使用的时间。
3char *ctime(const time_t *timer)返回一个表示当地时间的字符串,当地时间是基于参数 timer。
4double difftime(time_t time1, time_t time2)返回 time1 和 time2 之间相差的秒数 (time1-time2)。
5struct tm *gmtime(const time_t *timer)timer 的值被分解为 tm 结构,并用协调世界时(UTC)也被称为格林尼治标准时间(GMT)表示。
6struct tm *localtime(const time_t *timer)timer 的值被分解为 tm 结构,并用本地时区表示。
7time_t mktime(struct tm *timeptr)把 timeptr 所指向的结构转换为一个依据本地时区的 time_t 值。
8size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr)根据 format 中定义的格式化规则,格式化结构 timeptr 表示的时间,并把它存储在 str 中。
9time_t time(time_t *timer)计算当前日历时间,并把它编码成 time_t 格式。

使用例子

int time01()
{
	struct tm t;

	t.tm_sec = 10;
	t.tm_min = 10;
	t.tm_hour = 6;
	t.tm_mday = 25;
	t.tm_mon = 2;
	t.tm_year = 2021-1900;
	t.tm_wday = 6;

	cout << asctime(&t) << endl;
	//asctime(struct tm)
	//参数:struct tm,C语言时间的结构体
	//返回值:该函数返回一个 C 字符串,包含了可读格式的日期和时间信息 Www Mmm dd hh : mm:ss yyyy,其中,Www 表示星期几,Mmm 是以字母表示的月份,dd 表示一月中的第几天,hh : mm:ss 表示时间,yyyy 表示年份。
	return(0);
}

out:Sat Mar 25 06:10:10 2021

//计算程序的运行的时间
int tine02()
{
	clock_t start_t, end_t;
	double total_t;
	int i;

	start_t = clock();
	printf("程序启动,start_t = %ld\n", start_t);

	printf("开始一个大循环,start_t = %ld\n", start_t);
	for (i = 0; i < 10000000; i++)
	{
	}
	end_t = clock();
	printf("大循环结束,end_t = %ld\n", end_t);

	total_t = (double)(end_t - start_t) / CLOCKS_PER_SEC;
	printf("CPU 占用的总时间:%f\n", total_t);
	printf("程序退出...\n");
	return(0);
}

out:
程序启动,start_t = 104
开始一个大循环,start_t = 104
大循环结束,end_t = 122
CPU 占用的总时间:0.018000
程序退出…

int time03()
{
	time_t curtime;//这是一个适合存储日历时间类型。就是一个long long的类型
	time(&curtime);//时间的单位为秒,
	//返回值为当前时间,
	//如果参数不为空,数据也会存储到参数中
	printf("当前时间 = %s\n", ctime(&curtime));//
	//参数:time_t 的类型
	//返回值:chat* 的时间的字符串
	return(0);
}

out:当前时间 = Mon Dec 20 10:46:12 2021

int time04()
{
	time_t start_t, end_t;
	double diff_t;
	printf("程序启动...\n");
	time(&start_t);
	printf("休眠 5 秒...\n");
	Sleep(5000);
	time(&end_t);
	diff_t = difftime(end_t, start_t);
	printf("执行时间 = %f\n", diff_t);
	printf("程序退出...\n");

	return(0);
}

out:
程序启动…
休眠 5 秒…
执行时间 = 5.000000
程序退出…

int time05()
{
	time_t rawtime;//定义变量
	struct tm* info;
	char buffer[80];
	time(&rawtime);//获取时间
	info = localtime(&rawtime);//将time_t类型时间转化为tm的格式
	printf("当前的本地时间和日期:%s", asctime(info)); //将tm类型时间转化为char*的格式
	return(0);
}

out:
当前的本地时间和日期:Mon Dec 20 11:00:16 2021

format格式:

说明符替换为实例
%a缩写的星期几名称Sun
%A完整的星期几名称Sunday
%b缩写的月份名称Mar
%B完整的月份名称March
%c日期和时间表示法Sun Aug 19 02:56:02 2012
%d一月中的第几天(01-31)19
%H24 小时格式的小时(00-23)14
%I12 小时格式的小时(01-12)05
%j一年中的第几天(001-366)231
%m十进制数表示的月份(01-12)08
%M分(00-59)55
%pAM 或 PM 名称PM
%S秒(00-61)02
%U一年中的第几周,以第一个星期日作为第一周的第一天(00-53)33
%w十进制数表示的星期几,星期日表示为 0(0-6)4
%W一年中的第几周,以第一个星期一作为第一周的第一天(00-53)34
%x日期表示法08/19/12
%X时间表示法02:50:06
%y年份,最后两个数字(00-99)01
%Y年份2012
%Z时区的名称或缩写CDT
%%一个 % 符号%
//根据自己的需求输出时间格式
int time06()
{
	time_t rawtime;
	struct tm* info;
	char buffer[80];
	time(&rawtime);
	info = localtime(&rawtime);//获取当前时间,类型是time_t转为tm

	strftime(buffer, 80, "%Y年-%m月-%d日 %H:%M:%S", info);
	//参数:
	//str -- 这是指向目标数组的指针,用来复制产生的 C 字符串。
	//maxsize -- 这是被复制到 str 的最大字符数。
	//format -- 这是 C 字符串,包含了普通字符和特殊格式说明符的任何组合。这些格式说明符由函数替换为表示 tm 中所指定时间的相对应值。格式说明符是:
	//返回值:
	//如果产生的 C 字符串小于 size 个字符(包括空结束字符),则会返回复制到 str 中的字符总数(不包括空结束字符),否则返回零。
	printf("格式化的日期 & 时间 : |%s|\n", buffer);
	return(0);
}

out:
格式化的日期 & 时间 : |2021年-12月-20日 11:07:07|

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值