linux系统应用编程学习–time
1, 真实时间time相关API之间的关系,来自《Linux_UNIX系统编程手册(上)》
2,读书笔记
3,练习
#include <time.h>
#include <stdio.h>
#include <sys/time.h>
int main(int argc, char *argv[])
{
time_t t;
//1,test time()
printf("second of time1:%ld \n",time(NULL));//intput NULL can get second also.
printf("second of time2:%ld \n",time(&t));
printf("second of time3:%ld \n",t);
printf("string of time:%s \n",ctime(&t));
//2,test gettimeofday()
struct timeval tv;
gettimeofday(&tv,NULL);
printf("second from gettimeofday() is %ld\n",tv.tv_sec + tv.tv_usec/1000);
//3, gmtime();
struct tm tm_gm,*tm_p;
tm_p = gmtime(&t);
tm_gm = *tm_p;
printf("years =%d moth=%d day=%d hour=%d,min=%d\n"
,tm_gm.tm_year+1900
,tm_gm.tm_mon
,tm_gm.tm_mday
,tm_gm.tm_hour
,tm_gm.tm_min
);
//4,localtime()
tm_p = localtime(&t);
tm_gm = *tm_p;
printf("years =%d moth=%d day=%d hour=%d,min=%d\n"
,tm_gm.tm_year+1900
,tm_gm.tm_mon
,tm_gm.tm_mday
,tm_gm.tm_hour
,tm_gm.tm_min
);
//5,strftime() format date
{
printf("strftime() \n");
char buf[512];
strftime(buf,512,"%c",tm_p);
printf("%s \n",buf);
}
printf("execute end\n");
}
编译执行
gavin@vm-ubuntu:~/202108/2-time$ gcc ./time.c -o ./time
gavin@vm-ubuntu:~/202108/2-time$ ./time
second of time1:1629038664
second of time2:1629038664
second of time3:1629038664
string of time:Sun Aug 15 22:44:24 2021
second from gettimeofday() is 1629039559
years =2021 moth=7 day=15 hour=14,min=44
years =2021 moth=7 day=15 hour=22,min=44
strftime()
Sun Aug 15 22:44:24 2021
execute end
gavin@vm-ubuntu:~/202108/2-time$
4,总结
a,执行 time(&t)后,返回值和输入值(t)是相同的;
b,执行time(NULL)也可以返回当前时间的秒数。
c, 执行gettimeofday()后,通过 struct timeval tv计算出来的秒数和time()得到的秒数是相同的。
并且 timeval中定义了ms,可以用来精确的测量消耗的时间。
d, gmtime()和localtime()很接近,localtime需要考虑时区;
f,从手册中看到( man time): 得到struct tm中的tm_year要加1900年
月份是0-11,所以获取到的月份要加1;
5, 进程时间