前言
最近在使用C函数gettimeofday的时候,产生了一些疑惑。查阅了相关的资料,再次厘清了gettimeofday的用法,记录在此文档中,以便后续查找。
gettimeofday是什么?
gettimeofday是一个时间相关的标准C库函数。
gettimeofday能干什么?
gettimeofday能够获取到精确到微妙级的时间。
gettimeofday获取到的时间是什么?
getimeofday获取到的是自1970-01-01 00:00:00 +0000 (UTC)以来的秒数和微秒数。
注意:获取到的秒数和微秒数都是以UTC时间为基准来换算的,而不是本地时间。譬如:当前北京时间为2022-06-09 10:00:00,在计算时会先将北京时间转换成UTC时间2022-06-09 02:00:00,再去换算秒数和微秒数。
gettimeofday要怎么使用?
头文件:
#include <sys/time.h>
原型:
int gettimeofday(struct timeval *tv, struct timezone *tz);
接收两个输出型参数tv和tz ,返回一个int型的值。
其中 :
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
struct timezone {
int tz_minuteswest; /* minutes west of Greenwich */
int tz_dsttime; /* type of DST correction */
};
tv:自1970-01-01 00:00:00 +0000 (UTC)以来的秒数和微秒数。
tz:表示时区和夏令时信息。
注意:tz时区结构的使用是一个过时的设计,要求调用者在使用时将tz这个参数设置为NULL。
测试发现,如果不设置为NULL,取到的tz的值是{0,0}。
返回值:
0:操作成功
-1:操作失败
示例代码
#include <sys/time.h>
#include <stdio.h>
int main (int argc, char** argv)
{
struct timeval tv = {0};
int retVal = gettimeofday(&tv, NULL);
if (0 == retVal) {
printf("sec:%ld,usec:%ld since 1970-01-01 00:00:00 UTC\n", tv.tv_sec, tv.tv_usec);
}
return 0;
}