一、获取系统时间
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.测试结果