我是靠谱客的博主 动听盼望,最近开发中收集的这篇文章主要介绍c语言设置linux时间时区,Linux在C语言下的时区设置与修改(一),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

清理当前使用底层OS适配库代码,代码中涉及到了utc时间和本地时间转换。

发现代码中时区设置有问题。

每次设置时区时都会调用tzset函数,然后直接使用被初始化后的全局变量timezone去和utc时间相加减得到本地时间。

但是问题来了,这样做真的ok吗?

tzset的函数,反复看了关于该函数初始化tzname和timezone的使用说明。

在启动时第一次调用tzset,

---首先是以TZ环境变量为依据来获取时区信息timezone的,

-------若TZ环境变量为错的,无效的(但是存在!!!)则使用UTC时间,认为时区为0

------------然后TZ环境变量没有,则使用默认的locatime的时区文件来进行初始化时区,timezone=0。

上述流程已经通过程序验证过了。

但是问题来了,在运行过程中如果TZ环境变量变化了,此时如果调用tzset会刷新吗?因为这里涉及到时区被其他人更改后,能否同步的问题?

根据实际的程序验证,很不幸,如果是

TZ在运行过程中变化了

------直接在运行过程中tzset的调用不会起作用,timezone不会刷新。

---------关闭进程后,重新调用tzset后,发现TZ生效了。所以TZ对tzset的影响,看来只能是在第一次使用时才管用。

当然如果大家阅读过《Unix高级编程》,也知道其实localtime,mktime,等函数也是受时区影响了,可以看做使用的也是timezone这个全局变量,换句话说和上述的情况一样。使用tzset之后,如果改变TZ,其时区也不会变。

最后

以上就是动听盼望为你收集整理的c语言设置linux时间时区,Linux在C语言下的时区设置与修改(一)的全部内容,希望文章能够帮你解决c语言设置linux时间时区,Linux在C语言下的时区设置与修改(一)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部