linux手动更新时间必须同步系统时钟和硬件时钟,否则重启失效;用date -s修改系统时间后需执行hwclock --systohc持久化,或直接使用timedatectl set-time(自动同步两者)。

Linux手动更新时间不是“设完就完”,关键在于区分系统时钟和硬件时钟,且多数场景下必须两者同步,否则重启后时间回退。
用 date -s 临时改系统时间
这是最直接的修改方式,但只影响当前运行中的系统时钟,不碰硬件时钟,重启即失效。
- 必须用 root 权限或
sudo,例如:sudo date -s "2026-06-18 05:20:00" - 时间格式必须严格:双引号包裹,年月日用
-分隔,时分秒用:分隔 - 单独改日期或时间也行:
sudo date -s "2026-06-18"或sudo date -s "05:20:00" - 执行后立刻生效,
date命令可验证
用 hwclock --systohc 把系统时间写入硬件时钟
这是让手动设置“持久化”的必要一步。硬件时钟(RTC)掉电靠电池维持,系统开机时会从它读取初始时间。
- 执行
sudo hwclock --systohc后,下次开机才会沿用你刚设的时间 - 别漏掉这步——很多用户设完
date -s就以为搞定了,结果一重启回到 BIOS 旧时间 - 如果硬件时钟本身严重偏差(比如停走多年),先用
hwclock --set --date="..."单独校准硬件时钟再同步
用 timedatectl set-time 替代 date -s(systemd 系统)
在 Ubuntu 16.04+、CentOS 7+ 等 systemd 发行版中,timedatectl 更安全,它自动处理软硬件时钟一致性,且与 NTP 服务逻辑兼容。
- 先关掉 NTP:
sudo timedatectl set-ntp false,否则会拒绝手动设置 - 再设时间:
sudo timedatectl set-time "2026-06-18 05:20:00" - 它内部已隐含同步硬件时钟,无需额外跑
hwclock - 设完可重新启用 NTP:
sudo timedatectl set-ntp true,后续由服务接管
为什么不能只改系统时间?
因为 Linux 启动流程里,内核先从硬件时钟加载时间作为起点,再由用户空间服务(如 systemd-timesyncd 或 chronyd)校准。如果你只动了系统时钟而没更新硬件时钟,下次启动仍会从一个错误起点开始,可能触发 NTP 保护机制(如 chrony 的 panic threshold),导致同步失败或跳变。
真正可靠的手动更新,永远包含两个动作:改系统时钟 + 写入硬件时钟;或者用 timedatectl 一次性完成。忽略硬件时钟,等于只改了“当前快照”,没动“出厂设置”。











