C语言的时间函数(1)gettimeofday,timeval,timezone
gettimeofday是函数,其头文件和声明如下
#include <sys/time.h>
int gettimeofday(structtimeval*tv, struct timezone *tz);
其参数tv是保存获取时间结果的结构体,参数tz用于保存时区结果,timezone 参数若不使用则传入NULL即可。
下面是timeval和timezone的结构体说明:
struct timezone{
int tz_minuteswest;/*格林威治时间往西方的时差*/
int tz_dsttime;/*DST 时间的修正方式*/
}
而结构体timeval的定义为:
struct timeval{
long int tv_sec; // 秒数
long int tv_usec; // 微秒数
}
其实gettimeofday()函数是用来获取时间的,而上面的两个结构体是通过gettimeofday函数获取秒和微秒的
例如1:不需要时区的
#include <stdio.h>
#include <sys/time.h>
int main(void)
{
struct timeval tx;
gettimeofday(&tx,NULL);
printf("获取的秒时间 = %ld 获取的微秒时间 =%ld\n",tx.tv_sec,tx.tv_usec);
return 0;
}
运行的结果是:获取的秒时间 = 1514205194 获取的微秒时间 =756161
在了解第二个参数时首先要知道时区的意思。
int tz_minuteswest;//与格林尼治时间差,我们为东八区,即北京时间比该时间早八个小时,即当我们的时间是早上八点的时候,格林尼治时间(即世界时)为0点。与格林时间的差为-8小时(个人认为是因为选择编译器或者操作操作系统时选择的是北京时间,所以格林尼治时间相对于北京时间为-8小时,个人猜测,有待考证)。
int tz_dsttime;//DST 时间的修正方式
tz_dsttime 所代表的状态如下
DST_NONE /*不使用*/
DST_USA /*美国*/
DST_AUST /*澳洲*/
DST_WET /*西欧*/
DST_MET /*中欧*/
DST_EET /*东欧*/
DST_CAN /*加拿大*/
DST_GB /*大不列颠*/
DST_RUM /*罗马尼亚*/
DST_TUR /*土耳其*/
DST_AUSTALT /*澳洲(1986年以后)*/
返回值 成功则返回0,失败返回-1,错误代码存于errno。附加说明EFAULT指针tv和tz所指的内存空间超出存取权限。
举例2:有时区的
#include <stdio.h>
#include <sys/time.h>
int main(void)
{
struct timeval tx;
struct timezone tz;
gettimeofday(&tx,&tz);
printf("获取的秒时间 = %ld 获取的微秒时间 =%ld\n",tx.tv_sec,tx.tv_usec);
printf("与格林尼治的时差 = %ld DST矫正时差 =%ld\n",tz.tz_minuteswest,tz.tz_dsttime);
//tz.tz_minuteswest根据参数名称知道单位是分钟,我们可以转换成转换一下小时
printf("格林尼治相对于北京时间 time =%d\n",tz.tz_minuteswest/60);
return 0;
}
结果:
获取的秒时间
= 1514207086 获取的微秒时间 =416064
与格林尼治的时差 = -480 DST矫正时差 =0
格林尼治相对于北京时间 time =-8
推荐阅读
-
C语言的时间函数(1)gettimeofday,timeval,timezone
-
Linux C语言 高精度时间函数:gettimeofday() 获取时间差
-
Linux C语言 高精度时间函数:gettimeofday() 获取时间差
-
pow函数(数学次方)在c语言的用法,两种编写方法实例( 计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值)
-
C语言时间函数的ctime()和gmtime()你了解吗
-
用C语言写一个函数返回参数二进制中1的个数
-
C语言:时间复杂度为O(1)的两则小程序
-
C语言时间函数的ctime()和gmtime()你了解吗
-
C语言time.h中clock()函数测程序运行时间的方法
-
C语言之函数调用01—1到n的阶乘和