2011-05-18 42 views
2

在使用C++的Linux環境中,我需要將time_t值轉換爲不同時區的英文字符串表示形式。例如1305750080 - >「2011-05-18 13:21:20 PST」。我可以使用gmtime()或localtime()與strftime()結合來爲GMT和我的本地時區生成字符串。我將如何選擇一個替代時區?C++ time_t到特定時區的std :: string

+0

我已經重申了這一點,因爲接受的答案是調用不在C++標準庫中的函數;而是在POSIX標準中。 – 2011-05-18 21:53:05

回答

1

我認爲你可以用tzset來做到這一點。

setenv("TZ", "EST5EDT", 1); 
tzset(); 
4

gmtime() reference link here舉例說明了一種應用時區偏移的非常簡單的方法。當然,你可以創建一個枚舉或什麼的類,並提出一些更好的東西。

或者boost::date_time有一個相當廣泛的實現,可以在linux和windows上運行。

+0

我發現這個引用,但是如果日期換行,那麼不會引起問題嗎? – 2011-05-18 20:36:01

+0

我會建議提高太.. – Nim 2011-05-18 20:38:55

+1

@JoshG:是的,這個簡單的例子只處理時間,而不是日期,並且不處理與UTC有小數偏移的時區(如印度)。我可能也會使用提升。 – 2011-05-18 21:07:12

0

您可以使用putenv將環境變量TZ更改爲您想要的任何時區,然後使用localtime或最好是localtime_r。如果需要,您可以使用getenv緩存舊副本。