最可靠的方式是使用 timedatectl 命令:运行 timedatectl 查看时区,用 sudo timedatectl set-timezone asia/shanghai 修改,立即生效;旧系统可手动链接 /etc/localtime 并更新对应配置文件。

Linux 查看和修改时区最可靠的方式是使用 timedatectl 命令,它适用于绝大多数现代发行版(如 CentOS 7+、Ubuntu 16.04+、Debian 9+ 等),操作简单且能全局生效。
查看当前系统时区
直接运行以下任一命令即可确认当前设置:
-
timedatectl—— 显示完整时间状态,其中 Time zone 行明确标出时区(例如Asia/Shanghai (CST, +0800)) -
date—— 输出当前本地时间,末尾括号内通常显示时区缩写(如 CST、EDT、CEST) -
readlink /etc/localtime—— 查看该软链接实际指向的时区文件路径,比如/usr/share/zoneinfo/Asia/Shanghai -
cat /etc/timezone—— 在 Debian/Ubuntu 系统中,此文件常保存纯文本格式的时区名(如Asia/Shanghai)
修改系统时区(推荐方式)
使用 timedatectl set-timezone 是最安全、最标准的方法,无需手动操作文件:
- 先列出所有可用时区:
timedatectl list-timezones - 快速筛选中国相关时区:
timedatectl list-timezones | grep -i shanghai - 设为北京时间:
sudo timedatectl set-timezone Asia/Shanghai
执行后立即生效,无需重启系统。
旧系统或非 systemd 环境的手动设置
若系统不支持 timedatectl(如 CentOS 6、某些嵌入式 Linux),可手动替换时区链接:
- 备份原配置:
sudo cp /etc/localtime /etc/localtime.bak - 建立新链接:
sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime - 部分系统还需写入配置文件:
echo "Asia/Shanghai" | sudo tee /etc/timezone(Debian/Ubuntu)或echo "ZONE=Asia/Shanghai" | sudo tee /etc/sysconfig/clock(RHEL/CentOS 6)
验证与注意事项
修改后务必验证是否成功:
- 再次运行
timedatectl或date,确认时间显示为北京时间且时区标识正确 - 部分服务(如 cron、rsyslog、MySQL)可能缓存旧时区,需重启对应服务才能反映新设置
- 容器环境默认不继承宿主机时区,需在启动时挂载
/etc/localtime或设置环境变量TZ=Asia/Shanghai - 避免混用
tzselect—— 它只影响当前 shell 的TZ变量,不修改系统级设置











