gettimeofday函数与时区的关系 & 时区的修改

Posted 代二毛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gettimeofday函数与时区的关系 & 时区的修改相关的知识,希望对你有一定的参考价值。

前言

通常我们使用gettimeofday函数都是用来计算耗时,只关心两个时间的差值并不关心获得的具体时间。当我们用gettimeofday函数来获取时间并且换算出当前时间就要关心一些平时不常注意的细节,时区就是其中之一,同样的日期和时间当时区不同时函数返回的和格林威治时间差值就不同。

修改时区:

时区信息保存在/etc/localtime文件里,如果没有该文件则系统是零时区,有该文件时系统会去读取该文件。具体该文件的内容可以不同关心,在/usr/share/zoneinfo/目录下有各个时区对应的文件,只需要拷贝过去就可以。比如我们常用的东八区时间就是对应/usr/share/zoneinfo/Asia/Shanghai文件,只需要将该文件拷贝到/etc/localtime就将系统时间改为东八区。
该时区的指令:cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
查看当前系统时间的命令:date -R

修改日期:

通date命令,具体格式:date -s “2021-10-26 16:06:01”

用gettimeofday获取时间的代码

	#include<stdio.h>
	#include<sys/time.h>
	
	int main(){ 
		struct timeval tv;
		gettimeofday(&tv,NULL);
		printf("%d\\n",tv.tv_sec);
		return 0;
	}

测试结果

	root@Storage:/mnt# date -R                      
	Tue, 26 Oct 2021 16:06:08 +0000
	root@Storage:/mnt# 
	root@Storage:/mnt# ./test_x86.bin 
	1635264371
	
	root@Storage:/mnt# date -R        
	Tue, 26 Oct 2021 16:06:16 +0800
	root@Storage:/mnt#        
	root@Storage:/mnt# ./test_x86.bin 
	1635235580

分析:从上面可以看出,同样的日期和时间,时区不同得到的秒数不同,并且刚好是8小时((1635235580 - 1635264371)/60/60=8h),时区也刚好差8小时,说明gettimeofday函数的返回值和时区相关。

可能的应用场景

当你用gettimeofday函数获取时间并换算成当前时间时,如果你发现和你预期的时间对应不上,并且差值刚好是整数个小时,有可能是你时区没有弄对。比如系统是零时区,而你却把gettimeofday返回给你的时间按东八区去处理,那就会导致你得到的时间比当前时间差8小时。

以上是关于gettimeofday函数与时区的关系 & 时区的修改的主要内容,如果未能解决你的问题,请参考以下文章

gettimeofday()函数的使用方法

gettimeofday

Linux时间函数之gettimeofday()函数之使用方法

gettimeofday获取的是啥时间

时间相关函数

Linux系统信息与系统资源