CentOS 7 设置日期时间

基本概念

在 CentOS 6 版本,时间设置有 datehwclock 命令,从 CentOS 7 开始,使用了一个新的命令 timedatectl

GMT/UTC/CST/DST 时间

整个地球分为二十四时区,每个时区都有自己的本地时间。在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时(UTC,Universal Time Coordinated)。

格林威治标准时间 (Greenwich Mean Time)指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。UTC 与 GMT 时间基本相同,本文中不做区分。

CST 即中国标准时间 (China Standard Time),计算方法 GMT + 8 = UTC + 8 = CST

DST 是 Daylight Saving Time 的缩写,翻译过来即「夏令时」,指在夏天太阳升起的比较早时,将时钟拨快一小时,以提早日光的使用。

硬件时钟和系统时钟

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

系统时钟:一般在服务器启动时复制 RTC 时间,之后独立运行,保存了时间、时区和夏令时设置。

timedatectl 命令

常用命令不多,就以下几种:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 读取时间
// 等同于 timedatectl status
timedatectl

// 设置时区
timedatectl set-time "YYYY-MM-DD HH:MM:SS"

// 列出所有时区
timedatectl list-timezones

// 设置时区
timedatectl set-timezone Asia/Shanghai

// 设置 NTP 服务器同步(yes 或者 no)
timedatectl set-ntp yes

// 将硬件时钟调整为与本地时钟一致
timedatectl set-local-rtc 1
hwclock --systohc --localtime

// 硬件时间设置成 UTC
timedatectl set-local-rtc 1
hwclock --systohc --utc

设置中国时区并自动同步

网络时间协议(英语:Network Time Protocol,简称 NTP)是在数据网络潜伏时间可变的计算机系统之间通过分组交换进行时钟同步的一个网络协议。自 1985 年以来,NTP 是目前仍在使用的最古老的互联网协议之一。

为了避免我的众多 VPS 小鸡因为时间不同步带来的通信问题,我选择通过 NTP 服务进行时间同步,以下是简单的设置步骤。

1
2
3
4
5
6
7
8
9
10
11
12
// 安装ntp服务
yum install -y ntp
// 开机启动服务
systemctl enable ntpd
// 启动服务
systemctl start ntpd
// 更改时区
timedatectl set-timezone Asia/Shanghai
// 启用ntp同步
timedatectl set-ntp yes
// 同步时间
ntpq -p