1. 時區的概念
1.1 時區簡介
地球是自西向東自轉,東邊比西邊先看到太陽,東邊的時間也比西邊的早。東邊時刻與西邊時刻的差值不僅要以時計,而且還要以分和秒來計算,這給人們帶來不便。所以為了克服時間上的混亂,1884年在華盛頓召開的一次國際經度會議(又稱國際子午線會議)上,規定將全球划分為24個時區(東、西各12個時區)。規定英國(格林尼治天文台舊址)為中時區(零時區)、東1-12區,西1-12區。每個時區橫跨經度15度,時間正好是1小時。最后的東、西第12區各跨經度7.5度,以東、西經180度為界。每個時區的中央經線上的時間就是這個時區內統一采用的時間,稱為區時,相鄰兩個時區的時間相差1小時。例如,中國東8區的時間總比泰國東7區的時間早1小時,而比日本東9區的時間遲1小時。因此,出國旅行的人,必須隨時調整自己的手表,才能和當地時間相一致。凡向西走,每過一個時區,就要把表撥慢1小時(比如2點撥到1點);凡向東走,每過一個時區,就要把表撥快1小時(比如1點撥到2點)。並且規定英國(格林尼治天文台舊址)為本初子午線,即零時(24時)經線。
實際上,世界上不少國家和地區都不嚴格按時區來計算時間。但為了在全國范圍內采用統一的時間,一般都把某一個時區的時間作為全國統一采用的時間。例如,中國把首都北京所在的東8區的時間作為全國統一的時間,稱為北京時間。又例如,法國、荷蘭和比利時等國,雖然地處中時區,但為了和歐洲大多數國家時間相一致,則采用東1區的時間。


1.2 世界各城市時間查詢
查詢網站:https://www.timeanddate.com/
2. GMT、UTC、CST、DST 時間
2.1 UTC
整個地球分為二十四時區,每個時區都有自己的本地時間。在國際無線電通信場合,為了統一起見,使用一個統一的時間,稱為通用協調時(UTC, Universal Time Coordinated)。
2.2 GMT
格林威治標准時間 (Greenwich Mean Time)指位於英國倫敦郊區的皇家格林尼治天文台的標准時間,因為本初子午線被定義在通過那里的經線。(UTC與GMT時間基本相同,本文中不做區分)
2.3 CST
中國標准時間 (China Standard Time) UTC = GMT = CST - 8
2.4 DST
夏令時(Daylight Saving Time) 指在夏天太陽升起的比較早時,將時間撥快一小時,以提早日光的使用。(中國不使用)
3. 硬件時間和系統時間
3.1 硬件時間
RTC(Real-Time Clock)或CMOS時間,一般在主板上靠電池供電,服務器斷電后仍然繼續運行。僅保存日期時間數值,無法保存時區和夏令時設置。
3.2 系統時間
一般在服務器啟動時復制RTC時間,之后獨立運行,保存了時間、時區和夏令時設置。
4. CentOS7上的時間管理命令:timedatectl
4.1 timedatectl 選項
$ timedatectl --help timedatectl [OPTIONS...] COMMAND ... Query or change system time and date settings. -h --help Show this help message --version Show package version --no-pager Do not pipe output into a pager --no-ask-password Do not prompt for password -H --host=[USER@]HOST Operate on remote host -M --machine=CONTAINER Operate on local container --adjust-system-clock Adjust system clock when changing local RTC mode Commands: status Show current time settings set-time TIME Set system time set-timezone ZONE Set system time zone list-timezones Show known time zones set-local-rtc BOOL Control whether RTC is in local time set-ntp BOOL Control whether NTP is enabled
4.2 timedatectl 案例
查看當前系統時間、時區
$ timedatectl Local time: Thu 2018-10-11 13:03:04 CST Universal time: Thu 2018-10-11 05:03:04 UTC RTC time: Thu 2018-10-11 01:17:11 Time zone: Asia/Shanghai (CST, +0800) NTP enabled: no NTP synchronized: no RTC in local TZ: no DST active: n/a $ timedatectl status Local time: Thu 2018-10-11 13:03:09 CST Universal time: Thu 2018-10-11 05:03:09 UTC RTC time: Thu 2018-10-11 01:17:16 Time zone: Asia/Shanghai (CST, +0800) NTP enabled: no NTP synchronized: no RTC in local TZ: no DST active: n/a
列出全世界所有的時區
# timedatectl list-timezones | grep Asia ... Asia/Hong_Kong Asia/Shanghai Asia/Taipei
Asia/Urumqi ...
設置時區
# 方法1:
# 將時區設置為上海 $ timedatectl set-timezone Asia/Shanghai
# 方法2:
# 直接修改符號鏈接
$ rm /etc/localtime
$ ln -s ../usr/share/zoneinfo/Asia/Shanghai /etc/localtime
設置時間
# 方法1:使用timedatectl,NTP enabled: yes時,使用了NTP服務器自動同步時間,若堅持要手動修改時間,先timedatectl set-ntp no。 # 設置日期和時間 $ timedatectl set-time '2018-10-11 09:00:00' # 設置日期 $ timedatectl set-time '2018-10-11' # 設置時間 $ timedatectl set-time '09:00:00' # 方法2:使用date $ date -s '2018-10-11 09:00:00'
同步系統時間到硬件時間
# 方法1:不建議硬件時間隨系統時間變化 # 設置硬件時間隨系統時間變化 $ timedatectl set-local-rtc 1 # 設置硬件時間不隨系統時間變化 $ timedatectl set-local-rtc 0 # 方法2: $ hwclock --systohc
是否啟用自動同步時間
# 啟用|停用自動同步時間 $ timedatectl set-ntp yes|no # 上面的命令其實是啟用、停用時間服務器,若安裝了chrony服務,則等同於對該服務啟停,若只安裝了ntp,則是對ntp服務啟停。 # 對chrony服務啟停 $ systemctl start|stop chronyd # 對ntp服務啟停 $ systemctl start|stop ntpd
5. 自動同步時間:服務ntp、chrony,命令ntpdate
CentOS7之前采用ntp服務自動同步時間,CentOS7推薦使用chrony同步時間,當然ntp仍然可以使用,chrony官網列舉了諸多chrony優於ntp的功能(ntp與chrony的對比:https://chrony.tuxfamily.org/comparison.html)。
此外我們若要立刻將系統時間同步為NTP服務時間,使用ntpdate命令,也可以配置計划任務定期使用ntpdate命令同步時間,從而就不用使用ntp或chrony服務,減少監聽的端口,增加系統安全性。
5.1 ntp的安裝配置
安裝ntp
$ yum -y install ntp
配置ntp同步阿里雲時間服務器
$ vim /etc/ntp.conf ... server ntp1.aliyun.com server ntp2.aliyun.com server ntp3.aliyun.com #server 0.centos.pool.ntp.org iburst ...
啟動ntp服務器
$ systemctl start ntpd
5.2 chrony的安裝配置
安裝chrony
$ yum -y install chrony
配置chrony
$ vim /etc/chrony.conf server ntp1.alyun.com server ntp2.alyun.com server ntp3.alyun.com #server 0.centos.pool.ntp.org iburst
...
啟動chrony
$ systemctl start chronyd
5.3 配置計划任務,使用ntpdate同步時間
# 啟動並開機啟動計划任務cron $ systemctl start crond $ systemctl enable crond # 配置計划任務,每5分鍾同步一次 $ crontab -e */5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com
6. 參考文章
[博客] centos7之關於時間和日期以及時間同步的應用 作者:Charles.L
[百科] 搜狗百科時區的介紹
