2010-07-25 73 views
2

我的代碼從外部源接收一個time_t。然而,那time_t不是基於UTC Epoch時間的acutally,以及它我得到一個時區字符串(例如,EDT,PST等),並且它基於這個offset_ed時代。我需要將其轉換爲真正的基於UTC時代的time_t。將Unix time_t轉換爲/從任意時區轉換的最佳方法?

此外,我需要能夠走相反的方向,採用基於UTC時代的time_t和時區,並創建偏移的time_t,但是在這種情況下而不是類似EDT/PST的時區)等等,我有一個像「America/New York」這樣的Unix風格的時區描述,並且需要根據夏時制轉換爲正確的時區,所以我需要從算法中取回一個偏移的time_t和正確的描述符(EDT ,美東時間)。

我敢肯定,我可以通過臨時更改tzset()和某些組合的轉換時間間隔,time_t和timeval之間的轉換,但這樣做總是會讓我的大腦受傷,我錯過了很明顯的事任何人都可以推薦一些代碼或sudo代碼來做到這一點或至少有一個正確的方法?

+1

沒有任何明顯的或適當的(或清楚,或高興)時間操縱任何語言。 tzset()和localtime()/ strftime()是你最好的,imo。 – 2010-07-25 14:21:40

回答

0

會不會幫你these functions? localtime(),gmtime()等。

+0

這些是我通常用於這樣的任務以及其他幾個時間操作命令。我遇到的麻煩是找出所有不同命令和數據格式和轉換的正確鏈接,以實現我想要的,因爲它們都不會完成實際的工作。 – bdk 2010-07-25 14:37:59

1

time_t以秒爲單位,所以剛好將time_t的值與時區偏移的小時數的3600倍相抵。只要您具有明確識別的偏移量(即EST或EDT而不是US/Eastern或EST5EDT或其他),那麼這非常簡單並且不容易出錯。

+1

謝謝,在一個方向上,我確實擁有美國東部時間/美國東部時間,儘管在另一個方向上我只有美國/紐約。是否有一個標準函數需要timezeone(EDT,EST等)並返回小時偏移量? – bdk 2010-07-25 14:54:38

+0

不,不幸的是,時區名稱不是全球唯一的。如果你只需要支持美國的時區,你可以自己硬編碼並完成它。 – 2010-07-25 15:04:39