您的位置:首页 > 运维架构 > Linux

linux下的时间相关函数以及如何统计程序运行时间

2012-12-14 21:43 721 查看
Linux下时间有关的结构体:

1、timeval

  timeval结构的用于指定时间值。

  头文件: <sys/time.h>

struct timeval
{
  	time_t tv_sec; //秒 [long int]
  	suseconds_t tv_usec; //微秒 [long int]
};


2、timezone

struct timezone
{

  	int tv_minuteswest;

  	int tv_dsttime;

};


  tv_minuteswest是格林威治时间往西方的时差,tv_dsttime则是时间的修正方式。

3、timespec

struct timespec

{

  long int tv_sec;

  long int tv_nsec;

};


tv_nsec是nano second(10E-9 second)。

4、tm

struct tm {
  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()为负。*/
  long int tm_gmtoff; /*指定了日期变更线东面时区中UTC东部时区正秒数或UTC西部时区的负秒数*/
  const char *tm_zone; /*当前时区的名字(与环境变量TZ有关)*/
  };


获取当前时间的方法:

1、time()

time_t time(time_t *t);

这个函数会传回从epoch开始计算起的秒数,如果t是non-null,它将会把时间值填入t中。

2、gettimeofday()

对某些需要较高精准度的需求,Linux提供了gettimeofday()

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

int settimeofday(const struct timeval * tv,const struct timezone *tz);

3、struct tm格式时间函数

struct tm * gmtime(const time_t * t); 转换成格林威治时间。有时称为GMT或UTC。

  struct tm * localtime(const time_t *t); 转换成本地时间。它可以透过修改TZ环境变数来在一台机器中,不同使用者表示不同时间。

time_t mktime(struct tm *tp); 转换tm成为time_t格式,使用本地时间。

tme_t timegm(strut tm *tp); 转换tm成为time_t格式,使用UTC时间。

double difftime(time_t t2,time_t t1); 计算秒差。

文字格式时间:

1、char * asctime(struct tm *tp); char * ctime(struct tm *tp);

 这两个函数都转换时间格式为标准UNIX时间格式。

 Mon May 3 08:23:35 1999

ctime一率使用当地时间,asctime则用tm结构内的timezone资讯来表示。

2、size_t
strftime(char *str,size_t max,char *fmt,struct tm *tp);

strftime有点像sprintf,其格式由fmt来指定。

下面举一个小例子,说明如何获得系统当前时间:

  time_t now;

  struct tm *timenow;

  char strtemp[255];

  time(&now);

  timenow = localtime(&now);

  printf("recent time is : %s \n", asctime(timenow))


统计程序运行时间(us级别):

struct timeval starttime, endtime;

//get start time
gettimeofday(&starttime, NULL);

//operation
...

//get end time
gettimeofday(&endtime, NULL);

//calculate consume us
long cost_time = 1000000*(endtime.tv_sec - starttime.tv_sec) + endtime.tv_usec - starttime.tv_usec;

cout << cost_time << endl;






















                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐