计算时间间隔

一、函数说明

1.简介:

    在C语言中可以使用函数gettimeofday()函数来得到时间。它的精度可以达到微妙

2.函数原型:

#include<sys/time.h>
int gettimeofday(struct timeval*tv,struct timezone *tz )

3.说明:

    gettimeofday()会把目前的时间用tv 结构体返回,当地时区的信息则放到tz所指的结构中

4.结构体:

struct  timeval{
long tv_sec;/*秒*/
long tv_usec;/*微妙*/
};

struct timezone{
int tz_minuteswest;/*和greenwich 时间差了多少分钟*/
int tz_dsttime;/*type of DST correction*/
}

3>在gettimeofday()函数中tv或者tz都可以为空。如果为空则就不返回其对应的结构体。

4>函数执行成功后返回0,失败后返回-1,错误代码存于errno中。

二、例程

例1

#include<stdio.h>
#include<sys/time.h>
#include<unistd.h>

int main()
{
struct timeval tv;
struct timezone tz;
gettimeofday(&tv,&tz);

printf(“tv_sec:%d\n”,tv.tv_sec);
printf(“tv_usec:%d\n”,tv.tv_usec);
printf(“tz_minuteswest:%d\n”,tz.tz_minuteswest);
printf(“tz_dsttime:%d\n”,tz.tz_dsttime);
}

说明:在使用gettimeofday()函数时,第二个参数一般都为空,因为我们一般都只是为了获得当前时间,而不用获得timezone的数值

例2::了解程序执行所需的时间

测试调用delya()函数所需执行的时间(单位为微妙)

#include<stdio.h>
#include<sys/time.h>
#include<unistd.h>

int delay(int time)
{
int i,j;

for(i =0;i<time;i++)
for(j=0;j<5000;j++)
;
}

int main()
{
struct timeval start;
struct timeval end;

unsigned long diff;
gettimeofday(&start,NULL);
delay(10);
gettimeofday(&end,NULL);
diff = 1000000 * (end.tv_sec-start.tv_sec)+ end.tv_usec-start.tv_usec;
printf(“thedifference is %ld\n”,diff);
return 0;
}

获得当前时间

一、函数说明

用到的主要函数:time、ctime(或使用localtime)

头文件:time.h

函数声明:

time_t time(time_t *t); 
char *ctime(const time_t *timep);
struct tm* localtime(const time_t *timep)

函数意义:

time:

此函数会返回从公元1970 年1月1日的UTC时间从0时0分0秒算起到现在所经过的秒数。

如果t并非空指针的话,此函数也会将返回值存到t 指针所指的内存。

ctime:

此函数将参数tmep所指的time_t结构中的信息换成真实世界所使用的时间日期表示方法,

然后将结果以字符串的形态返回

localtime:

localtime()将参数timep所指的time_t结构中的信息换成当地时区的时间。

结构体tm的定义如下:

struct tm
{
int tm_sec; // 代表目前秒数, 正常范围为0-59, 但允许至61 秒
int tm_min; // 代表目前分数, 范围0-59
int tm_hour; // 从午夜算起的时数, 范围为0-23
int tm_mday; // 目前月份的日数, 范围01-31
int tm_mon; // 代表目前月份, 从一月算起, 范围从0-11
int tm_year; // 从1900 年算起至今的年数
int tm_wday; // 一星期的日数, 从星期一算起, 范围为0-6
int tm_yday; // 从今年1 月1 日算起至今的天数, 范围为0-365
int tm_isdst; // 日光节约时间的旗标
};

二、例程

例程1:

#include<stdio.h>
#include<sys/time.h>
#include<unistd.h>
int main()
{
char *str_local = NULL;
time_t time_local;
time(&time_local);
str_local = ctime(&time_local);
printf("local time : %s\n",str_local);
return 0;
}

运行结果:

local time : Thu Oct  4 16:39:23 2018

例程2:

#include<stdio.h>
#include<sys/time.h>
#include<unistd.h>
void gettime(char *local_time) {
char Year[6] = {0};
char Month[4] = {0};
char Day[4] = {0};
char Hour[4] = {0};
char Min[4] = {0};
char Sec[4] = {0};
time_t current_time;
struct tm* now_time;
time(&current_time);
now_time = localtime(&current_time);
strftime(Year, sizeof(Year), "%Y-", now_time);
strftime(Month, sizeof(Month), "%m-", now_time);
strftime(Day, sizeof(Day), "%d ", now_time);
strftime(Hour, sizeof(Hour), "%H:", now_time);
strftime(Min, sizeof(Min), "%M:", now_time);
strftime(Sec, sizeof(Sec), "%S", now_time);
strncat(local_time, Year, 5);
strncat(local_time, Month, 3);
strncat(local_time, Day, 3);
strncat(local_time, Hour, 3);
strncat(local_time, Min, 3);
strncat(local_time, Sec, 3);
}
int main(int argc,char **argv)
{
char *local_time = (char *)malloc(21*sizeof(char));
gettime(local_time);
printf("local time: %s\n", local_time);
free(local_time);
local_time = NULL;
return 0;
}

运行结果:

local time: 2018-10-04 16:41:01