很多人新装 Ubuntu 服务器或者虚拟机时,经常遇到时间不对的问题,日志时间、数据库时间、定时任务全部跟着时区跑偏。国内最常用的是东八区 Asia/Shanghai,本文整理三种修改时区方式:timedatectl(推荐)、tzdata 交互式、图形界面,适配 Ubuntu 20.04 / 22.04 / 24.04 所有现代版本。
注意:
Asia/Shanghai才是国内标准时区标识,不要使用 CST、Asia/Beijing,系统标准名称是 Shanghai。
一、先查看当前时区
timedatectl
输出里重点看这一行:
Time zone: UTC (UTC, +0000)
上面代表当前是 UTC 时区,需要改成 Asia/Shanghai。
也可以单独看软链接:
ls -l /etc/localtime
二、方法 1:timedatectl(首选,所有 systemd 版本推荐)
这是现代 Ubuntu 官方推荐方式,自动维护 /etc/localtime 软链接,一步到位Ubuntu Man…。
- 列出所有时区,搜索上海:
timedatectl list-timezones | grep Shanghai
结果:Asia/Shanghai
- 设置时区为东八区:
sudo timedatectl set-timezone Asia/Shanghai
- 再次校验:
timedatectl
看到下面就成功了:
Time zone: Asia/Shanghai (CST, +0800)
三、方法 2:dpkg-reconfigure tzdata 交互式向导
适合新手,会弹出图形化选择菜单,服务器无桌面也可以运行文本向导Ubuntu-it。
sudo dpkg-reconfigure tzdata
操作步骤:
- 先选择区域:
Asia - 再选择城市:
Shanghai回车确认,即时生效。
四、方法 3:手动软链接(兼容老系统,不优先推荐)
原理直接替换 /etc/localtime 指向时区文件:
sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
⚠️ 提醒:尽量优先用 timedatectl,手动软链接在部分容器、systemd 环境下可能和 timedatectl 状态不一致。
五、方法 4:桌面版图形界面(Ubuntu Desktop)
- 右上角点开系统菜单 → Settings(设置)
- 找到 System → Date & Time(日期和时间)
- 先关闭「Automatic Time Zone(自动时区)」
- 点击 Time Zone,搜索 Shanghai,在地图上选中上海即可自动保存Ubuntu Doc…
六、时区改完之后,时间同步补充(NTP)
时区只是调整偏移,时间本身不准,需要开启系统时间同步:
# 开启系统时间同步
sudo timedatectl set-ntp true
# 查看同步状态
timedatectl
如果服务器内网环境,可自行修改 /etc/systemd/timesyncd.conf 指定 NTP 服务器。
七、常见坑说明
- Docker 容器时区不跟着宿主机变 容器内时区独立,需要在启动时挂载时区文件,或者容器内部单独执行上面的时区命令。
# 示例:启动容器挂载宿主机时区
docker run -v /etc/localtime:/etc/localtime:ro xxx
- MySQL、Redis、应用日志时间没变 部分程序会在启动时缓存时区,修改系统时区后,重启对应服务才会生效。
- 不要用
date -s单纯改时间,时区不对,重启或者同步 NTP 后时间会再次错乱。
小结
表格
| 场景 | 推荐方案 |
|---|---|
| Ubuntu Server、云服务器 | sudo timedatectl set-timezone Asia/Shanghai |
| 新手、不想敲准确时区名 | sudo dpkg-reconfigure tzdata |
| 桌面 Ubuntu | 设置里图形化选择时区 |
修改时区是运维基础操作,日志排查、定时任务、数据库时间一致性都依赖它,装好系统第一件事建议就把时区和 NTP 同步配置好。
正文完
可以使用微信扫码关注公众号(ID:xzluomor)