时间计算
1. clock函数
- 精确度为秒
- clock函数返回从程序开始执行起处理器始终滴答的次数,为了把这个值转化为秒,应该除以CLOCKS_PER_SEC
#include<time.h>
#include<stdio.h>
#include<unistd.h>
int main()
{
clock_t t_begin,t_end;
t_begin =clock();
printf("t_begin is:%d\n", t_begin);
//sleep(5);
int s =0;
for(int i =0; i<1000000000;i++)
{
s += i;
}
printf("sum is:%d\n",s);
t_end =clock();
printf("diff is: %f\n",(double)(t_end-t_begin));
printf("total cost %f s\n",(double)((t_end-t_begin)/CLOCKS_PER_SEC));
return 0;
}
2. time函数
- time函数返回值为time_t,表示当前的日期和时间
- time_t变量(32位有符号量),常见的表示形式为返回从一个特定时刻开始流逝的秒数
- 使用difftime()函数计算时间差,精度为秒
#include<time.h>
#include<stdio.h>
#include<unistd.h>
int main()
{
time_t t_begin,t_end;
time(&t_begin);
sleep(5);
time(&t_end);
/*difftime计算时间差,并把时间转化为秒,返回值为double型*/
double total_time = difftime(t_end,t_begin);
printf("total time is:%f\n",total_time);
return 0;
}
3. gettimeofday函数
- 实现时间的毫秒级计算
#include <stdio.h>
#include <sys/time.h>
#include <time.h>
int main()
{
timeval start,end;
gettimeofday(&start, NULL);
sleep(5);
gettimeofday(&end, NULL);
long dif_sec = end.tv_sec - start.tv_sec;
long dif_usec = end.tv_usec - start.tv_usec;
printf("running time is %ldsec (%ld us)\n\n", dif_sec, dif_sec*1000000+dif_usec);
return 0;
}
打印当前时间
-
通过time()函数获取当前时间;
-
将time_t值转换为tm结构,通过tm结构,我们可以很方便的访问日期和时间的各个组成部分,一般通过以下两个函数实现
struct tm *gmtime(time_t const * time_vlaue);
struct tm *localtime(time_t const * time_value);
-
时间转换为字符串形式,通过strftime实现
size_t strftime(char* string, size_t maxsize, char const *format, struct tm const* tm_ptr)
-
具体实现
#include <stdio.h> #include <time.h> int main() { time_t t_begin; time(&t_begin); /*pstTime内存不需要释放 */ struct tm* pstTime = localtime(&t_begin); char pcCurrentTime[64] = {0}; strftime(pcCurrentTime, (sizeof(pcCurrentTime)-1),"%Y%m%d%H%M%S",pstTime); printf("current time is:%s\n",pcCurrentTime); return 0; }
-
效果如下
其他函数
asctime将参数所表示的时间值转换为以下面格式表示的字符串
char* asctime(struct tm const *tm_ptr)
mktime函数用于将tm结构转换为一个time_t值
time_t mktime(struct tm *tm_Ptr)