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小时。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

正在起飞的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值