timedatectl 是首选方法,适用于 systemd 系统,输出含时区名、UTC 偏移及 NTP 状态;旧系统用 readlink /etc/localtime 获取真实时区路径;date +"%Z %z" 提供轻量兼容的缩写与偏移;/etc/timezone 仅限 Debian/Ubuntu,非通用。

用 timedatectl 看最准,但得 systemd 支持
绝大多数现代 Linux 发行版(CentOS 7+、Ubuntu 16.04+、Debian 9+)都用 systemd,timedatectl 是首选。它直接读取系统运行时状态,输出包含完整时区名、UTC 偏移、NTP 同步情况等。
- 执行
timedatectl,找Time zone:那一行,比如Asia/Shanghai (CST, +0800) - 如果只想要纯时区名,加
--no-pager防止分页,再用grep提取:timedatectl --no-pager | grep "Time zone" - 旧系统(如 CentOS 6、RHEL 6)没 systemd,
timedatectl会报Command not found,别硬试
readlink /etc/localtime 是底层真相,所有系统都管用
/etc/localtime 几乎总是符号链接,指向 /usr/share/zoneinfo/ 下的真实时区文件。这个路径就是系统“认”的时区来源,不依赖任何服务或发行版特性。
- 运行
readlink /etc/localtime,输出类似/usr/share/zoneinfo/Asia/Shanghai - 路径末尾的
Asia/Shanghai就是当前时区名,可直接用于timedatectl set-timezone - 注意:某些容器或精简系统可能把
/etc/localtime换成普通文件(非链接),此时readlink输出为空;改用ls -l /etc/localtime看类型
date +"%Z %z" 只给缩写和偏移,适合脚本快速判断
如果你只需要知道“是不是 UTC+8”,或者写自动化脚本做简单分流,date 最轻量、最兼容。
-
date +"%Z"输出时区缩写,如CST(但注意:CST 在北美是 Central Standard Time,有歧义) -
date +"%z"输出 UTC 偏移,如+0800,这个值不会歧义,推荐在条件判断中用 - 组合起来:
date +"%Z %z"→ 输出CST +0800,能兼顾人眼识别和机器解析 - 别用
date -R,它输出 RFC 格式时间串,解析成本高,且-R在部分嵌入式 busybox 中不可用
查 /etc/timezone 仅限 Debian/Ubuntu 系,别当成通用方案
这个文件是 Debian 系发行版(包括 Ubuntu)的约定,用来记录时区名称,供 dpkg-reconfigure tzdata 等工具读取。它不是标准 POSIX 要求,Red Hat/CentOS/SUSE 都没有。
- 执行
cat /etc/timezone,输出可能是Asia/Shanghai或Etc/UTC - 如果文件不存在,别惊讶——这不代表时区没设好,只是该发行版不用这个机制
- 即使存在,它也可能滞后于实际配置(比如手动改了
/etc/localtime却忘了更新此文件)
/etc/localtime 和 /etc/timezone 不同步、timedatectl 显示正常但 cron 仍按旧时区跑、容器里挂载 /etc/localtime 为只读导致修改无效**——这些都不是“看不准”,而是“改了但没生效”。验证时务必用 date 输出结果,而不是只信某个配置文件。


















