GMT, UTC, DST, CST
格林威治標準時間GMT
英國1884年決定以通過格林威治的子午線作為劃分地球東西兩半球的經度零度。觀測所門口牆上有一個標誌24小時的時鐘,顯示當下的時間。對全球而言,這裡所設定的時間是世界時間參考點,全球都以格林威治的時間作為標準來設定時間,這就是我們耳熟能詳的「格林威治標準時間」(Greenwich Mean Time,簡稱G.M.T.)的由來。
世界協調時間UTC
多數的兩地時間表都以GMT來表示,但也有些兩地時間表上看不到GMT字樣,出現的反而是UTC這3個英文字母,究竟何謂UTC?事實上,UTC指的是 Coordinated Universal Time- 世界協調時間(又稱世界標準時間、世界統一時間),是經過平均太陽時(以格林威治時間GMT為準)、地軸運動修正後的新時標以及以「秒」為單位的國際原子時所綜合精算而成的時間,計算過程相當嚴謹精密,因此若以「世界標準時間」的角度來說,UTC比GMT來得更加精準。其誤差值必須保持在0.9秒以內,若 大於0.9秒則由位於巴黎的國際地球自轉事務中央局發佈閏秒,使UTC與地球自轉週期一致。所以基本上UTC的本質強調的是比GMT更為精確的世界時間標準,GMT與UTC的功能與精確度是沒有差別的。
夏日節約時間DST
所謂「夏日節約時間」Daylight Saving Time(簡稱D.S.T.),是指在夏天太陽升起的比較早時,將時鐘撥快一小時,以提早日光的使用,在英國則稱為夏令時間(Summer Time)。這個構想於1784年由美國班傑明·富蘭克林提出來,1915年德國成為第一個正式實施夏令日光節約時間的國家,以削減燈光照明和耗電開支。 自此以後,全球以歐洲和北美為主的約70個國家都引用這個做法。
設定時間
[FREEBSD]
設定時間為 20101220 11:00,格式 date yymmddhhmm.ss
# date 1012201100.00
查看系統時間
# date
2010年12月20日 周一 11時06分03秒 CST
修改時區,在FREEBSD要修改時區只要把那個時區的設定檔複製到 /etc/localtime
# cp /usr/share/zoneinfo/Asia/Taipei /etc/localtime
修改 Kernal time (adjkerntz = adjust kernal timezone)
# adjkerntz -a
# 微調時脈 Linux's adjtimex(2) is called ntp_adjtime(2) in FreeBSD.
註:據說在 FREEBSD 中沒有相對應於 hwclock 的指令,同時以上所有指令取出的時間都是 BIOS時間,而不是系統本身的時間??
利用 NTP 校時
# ntpdate -v -b time.stdtime.gov.tw
20 Dec 11:23:31 ntpdate[53976]: ntpdate 4.2.4p5-a Sun Dec 7 02:16:44 UTC 2008 (1)
20 Dec 11:23:32 ntpdate[53976]: step time server 163.17.40.2 offset 0.152610 sec
[LINUX]
設定時間為 20101220 11:00 格式為 date MMDDhhmmYYYY
# date 122011002010
讀取 BIOS 時間
# hwclock -r read
將系統時間-->硬體時間
# hwclock -w
將硬體時間-->系統時間
# hwclock --hctosys
利用 NTP 校時
# ntpdate -s ntpdate -s time.stdtime.gov.tw
修改時區
# cp /usr/share/zoneinfo/Asia/Taipei /etc/localtime
# vi /etc/sysconfig/clock
ZONE="Asia/Taipei"
UTC=false
ARC=false
PHP中timezone的設置
在php升級到5.3後會出現錯誤,這個是時區上的錯誤:
PHP Fatal error: Uncaught exception 'VerboseException' with message 'date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' instead' in ....
或
PHP Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Chongqing' for 'CST/8.0/no DST' instead in .... on line ...
因此得修改了php.ini 中的timezone
# vi /etc/php.ini
把這行改為Asia/Taipei即解決:
date.timezone = "Asia/Taipei"
中國可改為 Asia/Shanghai或Asia/Chongqing,不要改為 Asia/Beijing 錯誤的設定
延伸閱讀
參考資料
[1] http://www.51testing.com/?uid-248074-action-viewspace-itemid-209865
[2] 維基百科的時區地圖高清
[3] http://labs.almerblank.com/2009/10/amfphp-fatal-errors-after-php-5-3-upgrade-part-1/
原文 2010-12-20 10:43:51 2011-02-01 15:45:50