天天看點

Linux安裝應用時需要考慮時區問題并修改時區

關于時區的概念,其實國中地理課已經涉及,很多人都多少了解一些,可能隻是細節搞不太清楚。為什麼會将地球分為不同時區呢?因為地球總是自西向東自轉,東邊總比西邊先看到太陽,東邊的時間也總比西邊的早。東邊時刻與西邊時刻的內插補點不僅要以時計,而且還要以分和秒來計算。整個地球分為二十四時區,每個時區都有自己的本地時間。在國際無線電通信場合,為了統一起見,使用一個統一的時間,稱為通用協調時(UTC, Universal Time Coordinated)。UTC與格林尼治平均時(GMT, Greenwich Mean Time)一樣,都與英國倫敦的本地時相同。

關于時間的幾個标準,如下所示,具體可以Google、Baidu搜尋一下:

  • CST:中國标準時間(China Standard Time),這個解釋可能是針對RedHat Linux。
  • UTC:協調世界時,又稱世界标準時間,簡稱UTC,從英文國際時間/法文協調時間”Universal Time/Temps Cordonné”而來。中國大陸、香港、澳門、台灣、蒙古國、新加坡、馬來西亞、菲律賓、澳洲西部的時間與UTC的時差均為+8,也就是UTC+8。
  • GMT:格林尼治标準時間(舊譯格林威治平均時間或格林威治标準時間;英語:Greenwich Mean Time,GMT)是指位于英國倫敦郊區的皇家格林尼治天文台的标準時間,因為本初子午線被定義在通過那裡的經線。

裝過Linux系統的人,可能都會有這樣的經曆,就是該機器安裝windows系統時,時間正确,但是安裝了linux系統後,盡管時區選擇正确,也會發現系統時間不對。這是由于安裝系統時采用了UTC,那麼什麼是UTC呢,簡單的說UTC就是0時區的時間,是國際标準,而中國處于UTC+8時區。另外還有一種時間是當地時間,而windows采用的就是當地時間。是以安裝linux系統時,不要選擇使用UTC。

1.Linux下定時任務運作時間不一緻

很多時候,定時任務都是設定到一個固定的時間點進行業務處理。在windows環境下,通常我們的應用可以很好的運作,一旦切換到Linux下就不一定按時運作,因為Linux預設的時區是UTC,而中國所在的時區是UTC+8,是以Windows與Linux之間存在8小時的時差。這是必須要關注的。

Linux下運作日志:

2017-03-31 02:22:24,629 [Thread-9254] INFO  [com.wlyd.fmcgwms.util.api.APIHttpClient] - json:{"CustomerCode":"W001","SerialNo":"","UpdateTime":""}
2017-03-31 02:22:30,309 [Thread-9254] INFO  [com.wlyd.fmcgwms.util.api.APIHttpClient] - statusCode:200
2017-03-31 02:22:30,309 [Thread-9254] INFO  [com.wlyd.fmcgwms.util.api.APIHttpClient] - 調用API 花費時間(機關:毫秒):5680
2017-03-31 02:22:30,309 [Thread-9254] INFO  [com.wlyd.fmcgwms.util.api.APIHttpClient] - 調用接口狀态:0
2017-03-31 02:22:30,309 [Thread-9254] INFO  [com.wlyd.fmcgwms.service.platform.impl.APIForWaasServiceImpl] - 調用WAAS接口.........../updateproduct RESPONSE:{"IsSuccess":false,"OperationDesc":""}
           

實際上windows顯示的中原標準時間是10點多。

2.Linux下查詢目前系統所屬時區

1:使用date指令檢視時區

[[email protected] ~]# date -R
Sun, 11 Jan 2017 07:10:28 -0800
[[email protected] ~]# 
           

如上所示,上面指令輸出了-0800表示西八區,是美國舊金山所在的時區,下面表示我們國家的東八區(+0800)

[[email protected] ~]# date -R
Sun, 11 Jan 2017 23:06:02 +0800
           

2:檢視clock系統配置檔案

[[email protected] ~]# more /etc/sysconfig/clock
ZONE="America/Los_Angeles"
UTC=true
ARC=false
           

如上所示,表示該系統設定的時區為“America/Los_Angeles”,也就是西八區。

3.快速設定Linux系統時區

使用tzselect 指令:

[email protected]:~# tzselect
Please identify a location so that time zone rules can be set correctly.
Please select a continent, ocean, "coord", or "TZ".
 1) Africa
 2) Americas
 3) Antarctica
 4) Arctic Ocean
 5) Asia
 6) Atlantic Ocean
 7) Australia
 8) Europe
 9) Indian Ocean
10) Pacific Ocean
11) coord - I want to use geographical coordinates.
12) TZ - I want to specify the time zone using the Posix TZ format.
#? 5
Please select a country whose clocks agree with yours.
 1) Afghanistan		  18) Israel		    35) Palestine
 2) Armenia		  19) Japan		    36) Philippines
 3) Azerbaijan		  20) Jordan		    37) Qatar
 4) Bahrain		  21) Kazakhstan	    38) Russia
 5) Bangladesh		  22) Korea (North)	    39) Saudi Arabia
 6) Bhutan		  23) Korea (South)	    40) Singapore
 7) Brunei		  24) Kuwait		    41) Sri Lanka
 8) Cambodia		  25) Kyrgyzstan	    42) Syria
 9) China		  26) Laos		    43) Taiwan
10) Cyprus		  27) Lebanon		    44) Tajikistan
11) East Timor		  28) Macau		    45) Thailand
12) Georgia		  29) Malaysia		    46) Turkmenistan
13) Hong Kong		  30) Mongolia		    47) United Arab Emirates
14) India		  31) Myanmar (Burma)	    48) Uzbekistan
15) Indonesia		  32) Nepal		    49) Vietnam
16) Iran		  33) Oman		    50) Yemen
17) Iraq		  34) Pakistan
#? 9
Please select one of the following time zone regions.
1) Beijing Time
2) Xinjiang Time
#? 1

The following information has been given:

	China
	Beijing Time

Therefore TZ='Asia/Shanghai' will be used.
Local time is now:	Fri Mar 31 11:49:05 CST 2017.
Universal Time is now:	Fri Mar 31 03:49:05 UTC 2017.
Is the above information OK?
1) Yes
2) No
#? 1

You can make this change permanent for yourself by appending the line
	TZ='Asia/Shanghai'; export TZ
to the file '.profile' in your home directory; then log out and log in again.

Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
Asia/Shanghai
[email protected]:~# 
           

注意:tzselect指令隻告訴你選擇的時區的寫法,并不會生效。是以現在它還不是東8區中原標準時間。你可以在.profile、.bash_profile或者/etc/profile中設定正确的TZ環境變量并導出。 例如在.bash_profile裡面設定 TZ='Asia/Shanghai'; export TZ并使其生效。

參考文章:http://www.cnblogs.com/kerrycode/p/4217995.html

繼續閱讀