时间函数

一、获取系统时间

time函数

1.定义

函数 time_t time(time_t *t)在头文件“#include <time.h>”中。

参数 1:time_t 类型,以秒为单位,如果有参数则数据传送到 time_t *t 中。
返回值:如果参数为 NULL 会返回 time_t 类型;出现错误返回-1。

其中的时间类型 time_t,它是一个 long 类型,及其机器日历时间,在头文件 time.h 中定
义。

2.示例代码

/*函数time头文件*/
#include<time.h>

#include<stdio.h> 

int main(void)
{
	time_t timep;
	
	time(&timep);  // 通过传递参数获取系统时间  这个时间就是timep
	printf("UTC time: 0x%08x\n", timep);

	timep = time(NULL); // 通过返回值获取系统时间,这个时间就是timep
	printf("UTC time: 0x%08x\n", timep);

	return 0;
}

3.测试结果

将文件拷贝到tftp目录下
在这里插入图片描述
开发板通过tftp命令获取可执行文件
在这里插入图片描述
执行
在这里插入图片描述
需要修改权限
查看权限
在这里插入图片描述
执行

chmod 777 ./gettime

再次运行程序成功
在这里插入图片描述

二、时间转换

机器时间不是人类能够识别的,需要将机器时间转化为人民群众喜闻乐见的年月日时分秒的形式

1.定义

结构体定义:
常用时间 tm 结构体,如下所示

struct tm{
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday
;int tm_yday;
int tm_isdst;
};
其中的成员如下:
int tm_sec; 秒 – 取值区间为[0,59]。
int tm_min; 分 - 取值区间为[0,59]。
int tm_hour; 时 - 取值区间为[0,23]。
int tm_mday;一个月中的日期 - 取值区间为[1,31]。
int tm_mon;月份(从一月开始,0 代表一月) - 取值区间为[0,11]。
int tm_year;年份,其值等于实际年份减去 1900。
int tm_wday;星期 – 取值区间为[0,6],其中 0 代表星期天,1 代表星期一,以此类推 。
int tm_yday;从每年的 1 月 1 日开始的天数 – 取值区间为[0,365],其中 0 代表 1 月 1 日,1 代表 1 月 2 日,以此类推。
int tm_isdst; 夏令时标识符,实行夏令时的时候,tm_isdst 为正。不实行夏令时的进候,
tm_isdst 为 0;不了解情况时,tm_isdst()为负。

ctime函数

函数 ctime:将时间转化为字符串格式
char *ctime(const time_t *timep);

gmtime函数

函数 gmtime:将时间转化为格林威治时间,以 tm 结构存储。
struct tm *gmtime(const time_t *timep);

asctime函数

函数 asctime:将时间转换为字符格式,注意这个函数的参数是 tm 结构的。
char *asctime(const struct tm *tm);

localtime函数
函数 localtime:将时间转化为本地时间。
struct tm *localtime(const time_t *clock);

2.示例代码

#include <stdio.h>

#include <time.h>

int main(void){
	time_t timep;
	struct tm *tblock;
	
	time(&timep);  // 获取当前系统时间
	printf("ctime/timep is %s\n",ctime(&timep)); // 将时间转化为字符串格式
	
	// gmtime(&timep)  将时间转化为格林威治时间
	// asctime(gmtime(&timep)) 再将时间转化为字符格式
	printf("asctime is %s\n",asctime(gmtime(&timep)));
	
	tblock = localtime(&timep);  // 将时间转化为本地时间
	printf("localtime is :%s\n",asctime(tblock));
	printf("localtime is:%s\n",ctime(&timep));
	return 0;
}

3.测试结果

传输在这里插入图片描述
tftp传输运行
在这里插入图片描述

三、高精度时间函数

测试性能以秒为单位明显不够,提高精度则需要本节介绍的函数。本节实验稍微修改一下
就可以作为拿到任何开发板之后的测试例程

1.定义

gettimeofday函数 读取时间函数
settimeofday函数 设置时间函数

 接着介绍精度高一点的设置时间函数和读取时间函数。
int gettimeofday(struct timeval *tv, struct timezone *tz);
int settimeofday(const struct timeval *tv, const struct timezone *tz);
上面两个时间函数在头文件“#include <sys/time.h>”中。

先来介绍一下参数中的两个结构体。
struct timeval {
time_t tv_sec; /* 秒*/
suseconds_t tv_usec ;/* 微妙*/
};
struct timezone {
int tz_minuteswest;/* minutes west of Greenwich,格林威治时间的
时差 /
int tz_dsttime;/
type of DST correction,时间修正的方式 */
};
如上所示,介绍一下参数。
参数 tv:用于保存获取的时间。
参数 tz:可以缺省,传入 NULL。
上面获取的时间精度达到了微妙,比 time 函数获取的时间精度要高 6 个数量级。这个精
度就可以用于计算代码执行时间了。

2.示例代码

/*函数time头文件*/
#include<time.h>
/*函数gettimeofday和settimeofday的头文件*/
#include<sys/time.h>
#include<stdio.h>

void function() 
{ 
	 unsigned int i,j; 
	 double y; 
	 for(i=0;i<1000;i++) 
	 for(j=0;j<1000;j++) 
	 y=i/(j+1); //耗时操作
} 

main() 
{ 
	struct timeval tpstart,tpend; 
	float timeuse; 

	gettimeofday(&tpstart,NULL); //记录开始时间  保存在tpstart里
	function();
	
	gettimeofday(&tpend,NULL); //记录结束时间
	
	timeuse = 1000000*(tpend.tv_sec-tpstart.tv_sec)+ 
	tpend.tv_usec-tpstart.tv_usec; //计算差值 单位us
	timeuse /= 1000000; // 单位秒
	
	printf("Used Time:%f\n",timeuse); 
}

3.测试结果

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值