標籤:style io color os 使用 sp for strong on
當在嵌入式Linux裡面備份檔案時候,在備份的時候,PC(win7)和開發板的時間都是9:30,但是在開發板發現檔案建立時間是9:30,然後u盤插在PC(win7)上,發現檔案建立時間是1:30,為什麼相差8個小時?
世界協調時間(Universal Time Coordinated,UTC),GPS系統中有兩種時間區分,一為UTC,另一為LT(地方時)。兩者的區別為時區不同,UTC就是0時區的時間,地方時為本地時間,如北京為早上八點(東八區),UTC時間就為零點,時間比北京時晚八小時,以此計算即可.
UTC相當於本初子午線(即經度0度)上的平均太陽時,過去曾用格林威治平均時(GMT)來表示.北京時間比UTC時間早8小時,以1999年1月1日0000UTC為例,UTC時間是零點,北京時間為1999年1月1日早上8點整。
GMT(Greenwich Mean Time)是格林尼治平時:由於地球軌道並非圓形,其運行速度又隨著地球與太陽的距離改變而出現變化,因此視太陽時欠缺均勻性。視太陽日的長度同時亦受到地球自轉軸相對軌道面的傾斜度所影響。為著要糾正上述的不均勻性,天文學家計算地球非圓形軌跡與極軸傾斜對視太陽時的效應。平太陽時就是指經修訂後的視太陽時。在格林尼治子午線上的平太陽時稱為世界時(UT0),又叫格林尼治平時(GMT)。由於兩個系統設定時間時以主板CMOS內的時間為依據,但卻有不同的時間計算標準。所以導致了系統時間的糾紛問題。
Linux和蘋果作業系統以當前主板CMOS內時間做為格林威治標準時間,再根據系統設定的時區來最終確定當前系統時間(如時區設定為GMT+08:00北京時間時以及當前CMOS時間為03:00,那麼系統會將兩個時間相加得出顯示在案頭的當前系統時間為11:00)。
Windows 作業系統卻直接把CMOS時間認定為當前顯示時間,不根據時區轉換。這樣每調整一次系統時區,系統會根據調整的時區來計算目前時間,確定後,也就同時修改了CMOS內的時間(即每調整一次時區,設定儲存後,CMOS時間也將被作業系統改變一次,注意不同作業系統調整時間後,也會同時改變CMOS時間,這一點是共通的)。
這裡我們且不論兩種時間計算標準的好差,而僅讓Windows認定CMOS時間為格林威治標準時間來消除作業系統之間認定時間的差異,從而解決Windows作業系統與不同作業系統並存時出現的時間矛盾。
也就是說,UTC即Universal Time Coordinated,國際標準時間GMT即Greenwich Mean Time,格林尼治平時在這裡,你可以把UTC認為是GMT+0。Windows(XP和VISTA)和(Linux/Unix/Mac)預設看待系統硬體時間的方式是不一樣的:
* Windows把系統硬體時間當作本地時間(local time),即作業系統中顯示的時間跟BIOS中顯示的時間是一樣的。
* Linux/Unix/Mac把硬體時間當作UTC,作業系統中顯示的時間是硬體時間經過換算得來的,比如說北京時間是GMT+8,則系統中顯示時間是硬體時間+8。
這樣,當PC中同時有多系統共存時,就出現了問題。假如你的Ubuntu和WindowsXP中設定的時區都為北京時間東八區,而你在Ubuntu中把當前系統時間更改為9:00AM。則此時硬體中儲存的實際是UTC時間1:00AM。這時你重啟進入Windows後,你會發現windows系統中顯示的時間是1:AM,比Ubuntu中慢了八個小時。同理,你在Windows中更改或用網路同步了系統時間後,再到Ubuntu中去看,系統就會快了8小時。在實行夏令時的地區,情況可能會更複雜些。原因知道了,那怎麼來解決這種衝突呢。一種就是讓Windows把硬體時間當作UTC,與Linux/Unix/Mac保持一致。另一種就是讓linux/Unix/Mac把系統時間當作本地時間,與Windows保持一致。
那麼在Windows下的修改方法如下:
即在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation\中添加一項資料類型為REG_DWORD,名稱為RealTimeIsUniversal,值設為1。
也可用以下命令列:
@echo off
color 0a
Reg add HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation /v RealTimeIsUniversal /t REG_DWORD /d 1
echo.
echo 已讓Windows識別存貯在主板CMOS內的時間為格林威治標準時間(GMT),即系統根據CMOS時間和設定的時區來確定當前系統的時間。
echo.
pause
而在Ubuntu下的修改方法如下:
Ubuntu中不使用UTC時間,而啟用本地時間,需要修改 /etc/default/rcS ,修改動作如下:
在Ubuntu中,開啟終端:
sudo gedit /etc/default/rcS //這裡是設定時間用的 ("UTC=").
將: UTC=yes 改為: UTC=no 儲存即可解決問題
【轉】Windows與Linux(Ubuntu)雙系統時間不一致的解決方案