linux調整系統時間

tolywang發表於2010-02-23

http://blog.chinaunix.net/u/553/showart_495186.html
違規廣告.com/archiver/tid-371203.html
參考資料一、linux調整系統時區/時間的方法(tzselect命令)

1) 找到相應的時區檔案 /usr/share/zoneinfo/Asia/Shanghai   

用這個檔案替換當前的/etc/localtime檔案。

2) 修改/etc/sysconfig/clock檔案,修改為:

ZONE="Asia/Shanghai"
[color=red]UTC=true[/color]
ARC=false

3)
時間設定成2005年8月30日的命令如下:
#date -s 08/30/2005

將系統時間設定成下午6點40分0秒的命令如下。
#date -s 18:40:00

4)
同步BIOS時鐘,強制把系統時間寫入CMOS,命令如下:
#clock -w

5)重啟apache。

參考資料二、
本文件解釋瞭如何從linux下設定計算機的時鐘,如何設定您的時區和其它與linux如何儲存時間相關的材料。

您的計算機有兩個時鐘,一個是始終執行的、由電池供電的( 硬體的、BIOS或CMOS )時鐘,另一個是由執行在您的計算機上的作業系統維護的( 系統 )時鐘。硬體時鐘通常只在作業系統啟動時用來設定系統時鐘,然後直到重啟或關閉系統,由系統時鐘來記錄時間。在Linux 系統中,您可以選擇用UTC/GMT 時間或本地時間來記錄硬體時鐘。推薦的選項是用UTC 記錄,因為夏令時可以自動記錄。使用UTC 記錄硬體時鐘的唯一不足是,如果您使用雙系統,其它作業系統,如DOS 要求硬體時鐘用本地時間設定,那麼在那個作業系統裡時間將是錯誤的。

設定時區:

Linux 下的時區是透過建立從/etc/localtime[1] 到/usr/share/zoneinfo [2] 目錄下與您所在時區相符的檔案的符號鏈結實現的。例如,由於我在南澳大利亞,/etc/localtime就是到 /usr/share/zoneinfo/Australia/South的符號鏈結。要建立這個鏈結,執行:

ln -sf ../usr/share/zoneinfo/your/zone /etc/localtime

替換your/zone 為形如Australia/NSW或Australia/Perth 的檔案。看看/usr/share/zoneinfo目錄都有什麼時區。

[1] 這裡假設/usr/share/zoneinfo 是到/etc/localtime 的鏈結的前提是Redhat Linux

[2] 在舊版本的系統裡,您會發現使用/usr/lib/zoneinfo而不是/usr/share/zoneinfo。參考後面“一些應用程式中時間錯誤”。

設定UTC 或本地時間:

當Linux 啟動時,一個啟動指令碼執行/sbin/hwclock 程式複製當前硬體時鐘時間到系統時鐘。hwclock 假定硬體時鐘設定為本地時間,除非它使用了--utc 引數。在RedHat Linux下您不是編輯啟動指令碼,而是編輯/etc/sysconfig/clock 檔案,相應的改變UTC 一行為UTC=true或UTC=false。

設定系統時鐘:

在Linux 下設定系統時鐘使用date命令。例如,設定當前時間和日期為July 31,11:16pm,執行date 07312316 ( 注意這裡的時間是24小時制) ;如果您想設定年份為1998, 應該執行date 073123161998 ;要是也想設定秒,執行date 07312316.30或date 073123161998.30。要檢視Linux 當前本地時間,使用date,不帶引數。

設定硬體時鐘:

要設定硬體時鐘,我喜歡的方式是首先設定系統時鐘,然後設定硬體時鐘為當前系統時鐘時間,使用命令/sbin/hwclock --systohc (或 /sbin/hwclock --systohc --utc ) ,如果您使用UTC 儲存硬體時鐘) 。要檢視當前硬體時鐘的設定,不帶引數執行hwclock 。如果硬體時鐘是UTC 儲存,而您想看相應的本地時間,執行/sbin/hwclock --utc 。

一些應用程式中時間錯誤:

如果一些應用程式,如date顯示了正確的時間,而另一些則錯誤,而您執行著RedHat Linux 5.0/5.1,您很可能遇到了一個由於將時區資訊從/usr/lib/zoneinfo 移動到/usr/share/zoneinfo 引起的bug 。修復的方法是建立一個從/usr/lib/zoneinfo 到/usr/share/zoneinfo 的符號鏈結:

ln -s ../share/zoneinfo /usr/lib/zoneinfo 。

小結:

*/etc/sysconfig/clock 設定硬體時鐘,無論是用UTC 儲存還是用本地時間儲存
*建立/etc/localtime到/usr/share/zoneinfo/...的符號鏈結來設定時區
*執行date MMDDhhmm 來設定當前系統日期/ 時間
*執行/sbin/hwclock --systohc [--utc]來設定硬體時鐘

其它有趣的註解:

Linux kernel總是按照從UTC 時間1970年1 月1 日午夜開始的秒數來儲存和計算時間,無論您的硬體時鐘是否用UTC 儲存。轉換到本地時間的工作是執行時完成的。這樣做的一個妙處是,如果某人從不同的時區使用您的計算機,他可以設定時區環境變數,所有的日期和時間可以按 他的時區正確顯示。

如果自UTC 1972年1 月1 日開始的秒數用儲存為帶正負號32位整數,如同在您的Linux/Intel 系統上一樣,您的時鐘將在2038年停止工作。Linux 沒有Y2K 問題,但是確實存在2038年的問題。令人期望的是,那時我們都會使用64位系統來執行Linux 了。64位整數將使我們的時鐘一直執行到大約2922.71億年。

其它值得一看的程式:

* rdate ──從遠端機器獲得當前時間;可以用來設定系統時間
* xntpd ──類似rdata ,但是它是相當精確的,並且您需要有永久的網路連結xntpd 持續地執行,記錄網路延時、時鐘漂移等事件但是也有一個程式( ntpdate ) 包括在內,像rdate 一樣設定當前時間。

附錄一:(推薦)
CST時區問題 在很多unix下用date命令都能看到當前的時區。很多unix下中國時區都是用CST表示的。但是這個表示方法非常不合理。因為CST同時代表了下面4個時區。

CST Central Standard Time (USA) UT-6:00
CST Central Standard Time (Australia) UT+9:30
CST China Standard Time UT+8:00
CST Cuba Standard Time UT-4:00

在unix下透過/etc/localtime這個硬連線指向的/usr/share/zoneinfo下的時區檔案表示當前的真正時區。比如 /etc/localtime指向了/usr/share/zoneinfo/Asia/Shanghai這個檔案的時候,CST就代表了中國標準時間。
但是很多語言的時間函式庫根本不做這個判斷,往往就是用一個獨立的時區配置檔案做時區關鍵字和GMT的轉換。因此很多系統裡面CST都變成了GMT-6,也就是美國中部時間。

在zope裡面也是如此。而且很奇怪的是有的地方做了正確的判斷,有的地方沒做正確判斷。
比如檔案的最後修改時間就是錯的,但是如果對一個頁面做comment的時候,comment時間就是正確的。
修改Zope中DateTime\DateTime.py的定義為:'cst':'GMT+8',就能夠解決這個問題。
但是這樣做就需要改程式碼,然後重新編譯。
但既然CST這麼不確定,就不能用。幸好有一個HKT,是表示香港的時間,也是東8區,這個沒有錯。託香港的福,就用這個好了。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-627539/,如需轉載,請註明出處,否則將追究法律責任。

相關文章