前言
如果你的 Linux 系统时区配置不正确,必需要手动调整到正确的当地时区。NTP 对时间的同步处理只计算当地时间与 UTC 时间的偏移量,因此配置一个 NTP 对时间进行同步并不能解决时区不正确的问题。所以大家在用了国外云计算服务商如 Microsoft Azure 或其它 VPS、虚拟机时,需要注意是否与中国大陆的时区一致。
教程
查看Linux当前时区
你可以使用如下命令非常容易地就查看到 Linux 系统的当前时区:
root@mcheng:~# date Mon 09 May 2022 02:24:05 AM EDT root@mcheng:~# ls -l /etc/localtime lrwxrwxrwx 1 root root 30 Aug 16 2021 /etc/localtime -> /usr/share/zoneinfo/US/Eastern
获取时区TZ值
要更改 Linux 系统时区首先得获知你所当地时区的 TZ 值,使用 tzselect 命令即可查看并选择已安装的时区文件。
执行 tzselect 命令:
root@DMIT-SIeyeophVm:~# tzselect Please identify a location so that time zone rules can be set correctly. Please select a continent, ocean, "coord", or "TZ". 1) Africa 7) Europe 2) Americas 8) Indian Ocean 3) Antarctica 9) Pacific Ocean 4) Asia 10) coord - I want to use geographical coordinates. 5) Atlantic Ocean 11) TZ - I want to specify the time zone using the Posix TZ format. 6) Australia #? 4 //通过向导选择你所在大洲 Please select a country whose clocks agree with yours. 1) Afghanistan 10) Cyprus 19) Japan 28) Macau 37) Qatar 46) Turkmenistan 2) Armenia 11) East Timor 20) Jordan 29) Malaysia 38) Russia 47) United Arab Emirates 3) Azerbaijan 12) Georgia 21) Kazakhstan 30) Mongolia 39) Saudi Arabia 48) Uzbekistan 4) Bahrain 13) Hong Kong 22) Korea (North) 31) Myanmar (Burma) 40) Singapore 49) Vietnam 5) Bangladesh 14) India 23) Korea (South) 32) Nepal 41) Sri Lanka 50) Yemen 6) Bhutan 15) Indonesia 24) Kuwait 33) Oman 42) Syria 7) Brunei 16) Iran 25) Kyrgyzstan 34) Pakistan 43) Taiwan 8) Cambodia 17) Iraq 26) Laos 35) Palestine 44) Tajikistan 9) China 18) Israel 27) Lebanon 36) Philippines 45) Thailand #? 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. Selected time is now: Mon May 9 14:22:16 CST 2022. Universal Time is now: Mon May 9 06:22:16 UTC 2022. 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 //确认时区信息
tzselect 最终将以 Posix TZ 格式(例如 Asia/Shanghai)输出你所在的时区值,将此记录下来,然后执行:
TZ='Asia/Shanghai'; export TZ
执行完成之后需要重新登录系统或刷新 ~/.bashrc 生效:
ource ~/.bashrc
检验系统当前时间:
root@DMIT-SIeyeophVm:~# date Mon 09 May 2022 02:28:56 PM CST
然后在执行:
sudo rm -f /etc/localtime sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
使用Systemd更改Linux系统时区
如果你使用的 Linux 系统使用 Systemd,还可以使用 timedatectl 命令来更改 Linux 系统范围的时区。在 Systemd 下有一个名为 systemd-timedated 的系统服务负责调整系统时钟和时区,我们可以使用 timedatectl 命令对此系统服务进行配置:
[root@lax ~]# sudo timedatectl set-timezone 'Asia/Shanghai' [root@lax ~]# datetimecal Local time: Mon 2022-05-09 15:10:51 CST Universal time: Mon 2022-05-09 07:10:51 UTC RTC time: Mon 2022-05-09 07:08:53 Time zone: Asia/Shanghai (CST, +0800) NTP enabled: yes NTP synchronized: yes RTC in local TZ: no DST active: n/a [root@lax ~]# date Mon May 9 15:11:14 CST 2022