Write by lyc at 2020-4-14
参考博文:CentOS7修改时区的正确姿势

CentOS7 时区设置

1.各种时钟概念

时钟概念

  • UTC 整个地球分为二十四时区,每个时区都有自己的本地时间。在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时(UTC,Universal Time Coordinated)。
  • GMT 格林威治标准时间 (Greenwich Mean Time)指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。(UTC与GMT时间基本相同,本文中不做区分)
  • CST 中国标准时间 (China Standard Time)【GMT + 8 = UTC + 8 = CST】
  • DST 夏令时(Daylight Saving Time) 指在夏天太阳升起的比较早时,将时钟拨快一小时,以提早日光的使用。(中国不使用)

硬件时钟

RTC (Real-Time Clock)或CMOS时钟,一般在主板上靠电池供电,服务器断电后也会继续运行。仅保存日期时间数值,无法保存时区和夏令时设置。

系统时钟

  • 一般在服务器启动时复制RTC时间,之后独立运行,保存了时间、时区和夏令时设置。
  • 在CentOS 6版本,时间设置有datehwclock 命令
  • 从CentOS 7开始,使用了一个新的命令 timedatectl

2.timedatectl 常用命令

1
2
3
4
5
6
$ timedatectl                                   # 查看时间各种状态
$ timedatectl list-timezones # 列出所有时区
$ timedatectl set-timezone Asia/Shanghai # 设置系统时区为上海
$ timedatectl set-time "YYYY-MM-DD HH:MM:SS" # 设置本地时间
$ timedatectl set-time "HH:MM:SS" # 设置本地时间
$ timedatectl set-local-rtc 1 # (不常用)将硬件时钟调整为与本地时钟一致, 0 为设置为 UTC 时间

3.修改服务器时间时区为 Asia/Shanghai

CentOS7正确的修改时区姿势,方法一 + 方法二,不要使用cp命令来覆盖软连接文件

方法一:timedatectl 命令

1
2
3
4
5
6
7
8
9
10
11
12
# 查看时区,grep出上海的时区
$ timedatectl list-timezones|grep -i shanghai
Asia/Shanghai

# 设置时区为上海
$ timedatectl set-timezone Asia/Shanghai

# 查看验证
$ timedatectl
$ ll /etc/localtime
ll /etc/localtime
lrwxrwxrwx 1 root root 35 Apr 14 10:52 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai

方法二:软链接

1
2
# 需要加 -f 参数,强制覆盖,不然会显示软链接已存在
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

4.查看时间时区

timedatectl

1
2
3
4
5
6
7
8
9
$ timedatectl 
Local time: Tue 2020-04-14 10:35:19 CST # 可以看到服务器使用的是CST时间
Universal time: Tue 2020-04-14 02:35:19 UTC
RTC time: Tue 2020-04-14 02:35:20
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: no
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a

查看时区软连接文件

1
2
$ ll /etc/localtime
lrwxrwxrwx 1 root root 35 Apr 14 10:52 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai