linux系统修改系统时区和时间

深度链接 / 2023-12-06 21:48:19 / 111

你是否有过这样的经历,虚拟机的系统时间和宿主机系统时间不一致。是什么原因导致时间不一致的呢?可能是采用了协调世界时(英:Coordinated Universal Time ,法:Temps Universel Coordonné),又称世界统一时间,世界标准时间,国际协调时间。英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称UTC。中国处于UTC+8时区(东八区)。

1、时区设置

下面所有例子都是将系统时区设置为东八区(北京时间)

1.1、复制相应的时区文件替换系统时区文件

在/usr/share/zoneinfo/下

[root@wrx ~]# cd /usr/share/zoneinfo/
[root@wrx zoneinfo]# ls
Africa      CET      Etc        Hongkong     Kwajalein  Pacific     ROK        zone.tab
America     Chile    Europe     HST          Libya      Poland      Singapore  Zulu
Antarctica  CST6CDT  GB         Iceland      MET        Portugal    Turkey
Arctic      Cuba     GB-Eire    Indian       Mexico     posix       UCT
Asia        EET      GMT        Iran         MST        posixrules  Universal
Atlantic    Egypt    GMT0       iso3166.tab  MST7MDT    PRC         US
Australia   Eire     GMT-0      Israel       Navajo     PST8PDT     UTC
Brazil      EST      GMT+0      Jamaica      NZ         right       WET
Canada      EST5EDT  Greenwich  Japan        NZ-CHAT    ROC         W-SU
[root@wrx zoneinfo]#

直接复制相应的时区文件覆盖/etc/localtime

#使用Asia目录Shanghai时区文件
[root@wrx zoneinfo]# \cp /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime

1.2、修改链接/etc/localtime的时区文件

[root@wrx zoneinfo]# ln /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime
ln: creating hard link `/etc/localtime': File exists
[root@wrx zoneinfo]# rm /etc/localtime 
rm: remove regular file `/etc/localtime'? y
[root@wrx zoneinfo]# ln /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime
[root@wrx zoneinfo]# date -R
Mon, 21 Aug 2017 11:43:23 +0800

1.3、使用tzselect命令设置

[root@wrx zoneinfo]# tzselect
Please identify a location so that time zone rules can be set correctly.
Please select a continent or ocean.
 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) none - I want to specify the time zone using the Posix TZ format.
#? 5
Please select a country.
 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:	Mon Aug 21 11:47:01 CST 2017.
Universal Time is now:	Mon Aug 21 03:47:01 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
[root@wrx zoneinfo]#

tzselect命令只告诉你选择的时区的写法,并不会生效。所以现在它还不是东8区北京时间。你可以在.profile、.bash_profile或者/etc/profile中设置正确的TZ环境变量并导出。 例如在.bash_profile里面设置 TZ='Asia/Shanghai'; export TZ并使其生效。


2、系统时间设置

linux系统时钟有两个,一个是硬件时钟,即BIOS时间,就是我们进行CMOS设置时看到的时间,另一个是系统时钟,是linux系统Kernel时间。当Linux启动时,系统Kernel会去读取硬件时钟的设置,然后系统时钟就会独立于硬件运作。有时我们会发现系统时钟和硬件时钟不一致,因此需要执行时间同步。

#系统时间修改

#将日期修改为2017/08/08
[root@wrx zoneinfo]# date
Mon Aug 21 11:58:28 CST 2017
[root@wrx zoneinfo]# date -s 2017/08/08
Tue Aug  8 00:00:00 CST 2017
[root@wrx zoneinfo]#

#修改时间为12:12:12
[root@wrx zoneinfo]# date
Tue Aug  8 00:00:02 CST 2017
[root@wrx zoneinfo]# date -s 12:12:12
Tue Aug  8 12:12:12 CST 2017
[root@wrx zoneinfo]# 

#将时间设置为2008年8月8日8点8分8秒(MMDDhhmmYYYY.ss)
[root@wrx zoneinfo]# date  080808082008.08
Fri Aug  8 08:08:08 CST 2008

#硬件时间修改

#显示硬件时间
[root@wrx zoneinfo]# hwclock
Mon 21 Aug 2017 12:02:57 PM CST  -0.861941 seconds
[root@wrx zoneinfo]# hwclock --show
Mon 21 Aug 2017 12:03:41 PM CST  -0.891730 seconds
[root@wrx zoneinfo]# 

#硬件时间设置
[root@wrx zoneinfo]# hwclock --show
Mon 21 Aug 2017 12:03:41 PM CST  -0.891730 seconds
[root@wrx zoneinfo]# hwclock --set --date="08/08/2008 08:08:08"
[root@wrx zoneinfo]# hwclock --show
Fri 08 Aug 2008 08:08:12 AM CST  -0.079967 seconds

#用硬件时钟同步系统时钟
[root@wrx zoneinfo]# date
Fri Aug  8 08:12:53 CST 2008
[root@wrx zoneinfo]# hwclock --show
Fri 08 Aug 2008 08:09:30 AM CST  -0.231018 seconds
[root@wrx zoneinfo]# hwclock --systohc
[root@wrx zoneinfo]# date
Fri Aug  8 08:13:12 CST 2008
[root@wrx zoneinfo]# hwclock --show
Fri 08 Aug 2008 08:13:21 AM CST  -0.314465 seconds
[root@wrx zoneinfo]# 

#用系统时钟同步硬件时钟
[root@wrx zoneinfo]# date
Fri Aug  8 08:14:41 CST 2008
[root@wrx zoneinfo]# hwclock --show
Fri 08 Aug 2008 08:14:45 AM CST  -0.766814 seconds
[root@wrx zoneinfo]# hwclock --hctosys
[root@wrx zoneinfo]# date
Fri Aug  8 08:15:04 CST 2008
[root@wrx zoneinfo]#