我正在做一些代码,我需要知道系统中的哪个时区处于活动状态(我正在使用Linux SO):
我的第一个问题是检查TZ
环境variables,它是空的,除非我设置它(例如调用tzset)
之后,我尝试extern long timezone
(time.h),但是这个variables总是0。
最后,我计算我的时区和UTC + 0的差异,但我没有得到我的真实时区,因为我不知道夏时制是否适用
我很确定,有一个简单的(最一致的)方法来实现这一点。 我正在寻找像“欧洲/巴黎”或“UTC + 2”或类似的东西
任何帮助将不胜感激!
作为一个起点,我会提出这样的建议:
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { char str[64]; time_t timer; struct tm * ptm; timer = time(NULL); ptm = localtime(&timer); strftime(str, sizeof(str), "%Z", ptm); printf("TZ: %s\n", str); return(0); }
date +%Z
命令显示当前时区,但实际需要的是正确设置。 首先删除当前的时区文件:
# rm -f /etc/localtime
然后为你的时区设置正确的:
# ln -s /usr/share/zoneinfo/<your-time-zone-here> /etc/localtime
做一个ls /usr/share/zoneinfo/
来查看可用的时区。 对我来说是/usr/share/zoneinfo/Europe/Amsterdam
。
然后使用上面提到的date
命令进行验证。