如何知道系统正在使用哪个时区

时间:2016-11-10 11:50:26

标签: c linux timezone

我正在做一些代码,我需要知道系统中哪个时区是活动的(我正在使用Linux SO):

  • 我的第一个方法是检查TZ环境变量,除非我设置它(例如调用tzset)它是空的

  • 之后我尝试extern long timezone(time.h),但此变量始终为0.

  • 最后我计算了我的时区和UTC + 0的差异,但我没有得到我的真实时区,因为我不知道夏令时是否适用

我很确定有一种简单(且最一致)的方法来实现这一目标。我正在寻找类似“欧洲/巴黎”或“UTC + 2”之类的东西

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:3)

作为一个起点,我建议:

#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);
}

答案 1 :(得分: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命令进行验证。