(转)linux c 获取系统时间

使用C语言编写程序需要获得当前精确时间(1970年1月1日到现在的时间),或者为执行计时,可以使用gettimeofday()函数。

 

#include <sys/time.h>

int gettimeofday(struct timeval*tv, struct timezone *tz);

其参数tv是保存获取时间结果的结构体,参数tz用于保存时区结果:

    结构体timezone的定义为:

struct timezone{
int tz_minuteswest;/*格林威治时间往西方的时差*/
int tz_dsttime;/*DST 时间的修正方式*/
}

timezone 参数若不使用则传入NULL即可。

而结构体timeval的定义为:

struct timeval{
long int tv_sec; // 秒数
long int tv_usec; // 微秒数
}

它获得的时间精确到微秒(1e-6 s)量级。

在一段代码前后分别使用gettimeofday可以计算代码执行时间:

struct timeval tv_begin, tv_end;
gettimeofday(&tv_begin, NULL);
~~~
gettimeofday(&tv_end, NULL);

下面来看一个demo,怎样获取系统当前时间(用ms表示,并且获取程序段运行时间)

#include <stdio.h>

#include <sys/time.h>

#include <time.h>

int gettimeofday(struct timeval *tv, struct timezone *tz);

int main(int argc,char * argv[])

{

    struct timeval t_start,t_end;

    long cost_time = 0;

 

    //get start time

    gettimeofday(&t_start, NULL);

    long start = ((long)t_start.tv_sec)*1000+(long)t_start.tv_usec/1000;

    printf("Start time: %ld ms\n", start);

 

    sleep(2);

    usleep(5000);//5毫秒

 

    //get end time

    gettimeofday(&t_end, NULL);

    long end = ((long)t_end.tv_sec)*1000+(long)t_end.tv_usec/1000;

    printf("End time: %ld ms\n", end);

 

    //calculate time slot

    cost_time = end - start;

    printf("Cost time: %ld ms\n", cost_time);

 

   return 0;

}

  printf("second:%ld\n",tv.tv_sec);  //秒
    printf("millisecond:%ld\n",tv.tv_sec*1000 + tv.tv_usec/1000);  //毫秒
    printf("microsecond:%ld\n",tv.tv_sec*1000000 + tv.tv_usec);  //微秒

其中,long start = ((long)t_start.tv_sec)*1000+(long)t_start.tv_usec/1000;

用来表示,当前获取的系统时间,用毫秒来表示

 

C语言time(null)的用法

	time_t time1 = time(NULL);//获取系统时间,单位为秒;
	struct tm *ti = localtime(&time1);//转换成tm类型的结构体;
	
	printf("get sys time = %s",asctime(ti));
	printf("get sys time = %s",ctime(&time1));//两个打印结果一样

 

说明:此函数获得的tm结构体的时间是日历时间。

用 法: struct tm *localtime(const time_t *clock);返回值:返回指向tm 结构体的指针.

tm结构体是time.h中定义的用于分别存储时间的各个量(年月日等)的结构体.

struct tm {
         int tm_sec;     /* seconds after the minute - [0,59] */
         int tm_min;     /* minutes after the hour - [0,59] */
         int tm_hour;    /* hours since midnight - [0,23] */
         int tm_mday;    /* day of the month - [1,31] */
         int tm_mon;     /* months since January - [0,11] */
         int tm_year;    /* years since 1900 */
         int tm_wday;    /* days since Sunday - [0,6] */
         int tm_yday;    /* days since January 1 - [0,365] */
         int tm_isdst;   /* daylight savings time flag */
         };

--另一种用法--------------------------------------------------------------------------------------------------------------------

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

int gettimeofday(struct timeval *tv, struct timezone *tz);
int main(int argc,char * argv[])  
{  
	struct timeval tv1,tv2;
	struct tm *gmt, *area;
	while(1)  
    {  
		gettimeofday(&tv1,0);           //打印文件名和此段程序行数,并显示系统时间和微秒数;	
		printf("%s:%d      linetime %ld:%ld\n",__FILE__,__LINE__,tv1.tv_sec,tv1.tv_usec); 

		area = localtime(&(tv1.tv_sec));//以本地时区显示时间
		printf("Local time is: %s\n", asctime(area));

		gmt = gmtime(&(tv1.tv_sec));//以GMT时区显示时间
		printf("GMT is:       %s\n", asctime(gmt));

		sleep(2);
	}
return 0;  
}

运行结果:

 

===效果对比=====================================================================================

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

int main()
{
	int gettimeofday (struct timeval *tv,struct timezone *tz); 
	
	time_t mytime;
	//获取系统时间
	time(&mytime);
	struct tm *tm=localtime(&mytime);
	printf("%d,%d,%d  %d:%d:%d\n",tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec);
	printf("%s",ctime(&mytime));
	printf("%ld\n",mytime);
	
	
	struct timeval tv;
	gettimeofday(&tv,NULL);
	printf("%ld\n",tv.tv_sec);
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值