2016-11-10 65 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鏈接,因爲它並不總是鏈接) –

相關問題