2011年1月18日 星期二

代管主機時區問題

使用虛擬主機時常會遇到時區的問題,像 HG 的主機,他的時區是設成 CDT(Central Daylight Time),CDT 是 UTC-5,但台灣(香港、澳門、大陸)是UTC+8,所以有時會產生一些問題。
這些問題會隨著使用時間的不同方式,而有不同的處理方法。
例如我在指令列下使用 date,預設他是用 localtime
所以他秀出來的時間是CDT的時間,格式如下:
Thu Apr  9 09:03:13 CDT 2009
但是我們如果想要改成台灣的時間,就要設定 TZ 這個環境變數,比如台灣是 UTC+8,就要把 TZ 設定成「UTC-8」,如下:
export TZ=’UTC-8′
這樣執行 date 就會有如下的結果:
Thu Apr  9 22:04:26 UTC 2009
如果我們要設定阿拉斯加的時間,他的時區是UTC-8,那麼我們的 TZ 變數就要設定成「UTC+8」,就會有如下的結果:
Thu Apr  9 06:03:31 UTC 2009
說真的,我還真搞不懂為什麼 TZ 變數要和 UTC 的設定法 正負號相反,挺奇怪的,等有空再來找一下答案。
如果是使用 php 來寫程式,則有另外的處理方式。
php 常用的時間記錄方式是 unix timestamp;unix timestamp 是從 00:00:00 1970-01-01UTC開始記錄經過多少秒,用這種方式有幾個好處,第一是好計算,第二是有不少函數支援這種計算方式。
這種方式因為一開始就設定好了 UTC ,所以只要在處理顯示格式時,注意一下時區就好。
另一種的格式則是 mysql timestamp,這種是直接以時間的格式寫入資料庫的,所以程式執行了一段時間後,才想到要更改 timezone,會導致更改前後的時間資料時區不一致,這點要小心。
●參考資料
1、http://www.timeanddate.com/time/

沒有留言: