2016-11-10 39 views
3

我做了一些代码,我需要已知哪个时区是活跃在系统(我的工作在Linux SO)与已知:如何哪个时区系统使用

  • 我的第一个形式给出是检查TZ环境变种,它是空的,除非我把它(例如调用tzset)

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

  • 最后我计算出不同之处我的时区的ENCE和UTC + 0,但我如果夏令申请

没有得到我真正的时区,因为我不知道我敢肯定,有一个简单的(和最稳定)的方式为了达成这个。我正在寻找像“欧洲/巴黎”或“UTC + 2”或类似的东西

任何帮助将不胜感激!

+1

http://stackoverflow.com/q/13804095/1606345 –

+0

@KeineLust谢谢,但我期待的时区不是当前的GMT抵消。无论如何,这是一个很好的线索 –

+0

这是我用的:https://github.com/HowardHinnant/date/blob/master/tz.cpp#L3030-L3097这是C++,但你可以很容易地将它翻译成C. –

回答

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); 
} 
+0

我不认为'sizeof(str-1)'做你认为它做的事。 – unwind

+0

@unwind。当然是。错字,更正。谢谢。 – Djee

+0

这几乎是我想要的!,我得到巴黎的CET,纽约的EST和哥斯达黎加的CST。 –

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命令进行验证。

+0

这不是我要求的,我已经拥有这样做是为了用几个时区来检查我的代码,但是我想从C程序中获取我的时区(当然,我不能读取/ etc/localtime链接,因为它并不总是链接) –

相关问题