timedatectl set-time 是 Ubuntu 20.04+ 修改系统时间的首选方式,因其持久生效、自动同步硬件时钟(需配合 hwclock --systohc),且在关闭 NTP 后不会被立即覆盖;而 date -s 仅临时生效,因 NTP 服务会自动校正。

timedatectl set-time 是当前 Ubuntu(20.04+)修改系统时间的首选方式,它能持久生效、自动同步硬件时钟(配合 hwclock --systohc),且不会被 NTP 立即覆盖——前提是先关掉 NTP 同步。
为什么直接用 date -s 会失效?
因为 Ubuntu 默认启用 systemd-timesyncd 或 ntpd,只要 timedatectl set-ntp true 处于开启状态,系统会在几秒到几分钟内把手动改的时间拉回网络时间。你看到时间“跳回去”,不是命令没执行,而是 NTP 在后台默默纠正了它。
常见错误现象:sudo date -s "2026-07-07 19:30:00" 执行后立刻 date 查看是对的,但 10 秒后再查就变回原样。
- 必须先执行
sudo timedatectl set-ntp false -
date -s只适合临时调试(比如测试日志时间戳逻辑),不推荐用于正式设置 - 它不更新硬件时钟,重启后时间大概率丢失
正确步骤:用 timedatectl 永久设时间
这是官方推荐、兼容性好、一步到位的做法,适用于 Ubuntu 20.04 / 22.04 / 24.04。
- 关闭 NTP:
sudo timedatectl set-ntp false - 设置时间(格式严格为
"YYYY-MM-DD HH:MM:SS"):sudo timedatectl set-time "2026-07-07 19:30:00" - 确认时区正确(否则时间显示可能偏差):
sudo timedatectl set-timezone Asia/Shanghai - 写入硬件时钟(防止重启还原):
sudo hwclock --systohc - (可选)恢复自动同步:
sudo timedatectl set-ntp true
注意:timedatectl set-time 本身不自动刷硬件时钟,hwclock --systohc 这步漏掉,下次硬重启时间就回退。
Ubuntu 26.04 LTS(代号“Resolute Raccoon”)是Canonical于2026年4月23日发布的下一代长期支持版操作系统,提供长达10年的技术支持。它搭载Linux 7.0内核与GNOME 50桌面环境,全面转向Wayland协议,并引入Rust重写的核心工具以增强安全性。官方提供适用于AMD64和ARM64架构的桌面及服务器ISO镜像,是追求前沿技术与极致稳定的开发者
时区设错会导致时间显示偏差
比如系统时间实际是 UTC,但时区设成 Asia/Shanghai,date 就会显示 +0800 偏移后的时间——看起来像“快了 8 小时”,其实只是解释错了。
- 查当前时区:
timedatectl status | grep "Time zone" - 列出中国常用时区:
timedatectl list-timezones | grep -i shanghai(返回Asia/Shanghai) - 不要手动生成
/etc/localtime软链接,timedatectl set-timezone已自动处理所有关联配置 - 虚拟机里如果宿主机和客户机时区不同,优先以宿主机时区为准,客户机设成一致更稳妥
Docker 容器里改不了系统时间
容器共享宿主机内核时钟,date 或 timedatectl 在容器内执行成功,但只影响该进程的 time namespace(如果启用了),对宿主机和其他容器无效,且重启容器即失效。
- 真正要改时间,必须在宿主机上操作
- 容器内应用若依赖准确时间,应确保宿主机时间正确,并考虑挂载
/dev/rtc或使用--cap-add=SYS_TIME(不推荐,破坏隔离性) - CI/CD 或测试环境需固定时间,建议用
faketime注入,而非真改系统时间
硬件时钟(RTC)和系统时钟不同步、NTP 服务异常、或 BIOS 电池老化,都可能导致改完过一阵又漂移——这些得从硬件和长期运维层面排查,单次命令解决不了。

















