最直接方式是执行 date 命令,默认输出含时区缩写(如 cst)和 utc 偏移量(如 +0800);其中数字偏移(+hhmm)准确可靠,缩写可能歧义。

用 date 查当前时区和 UTC 偏移量最直接的方式
系统当前时区名和 UTC 偏移量(比如 +0800)会一起显示在 date 默认输出里,无需额外参数。
执行:date
典型输出类似:Fri Apr 17 12:47:22 CST 2026 或 Fri Apr 17 12:47:22 UTC+08 2026。其中 CST 是时区缩写,+0800 或 +08 就是偏移量。注意:CST 在中国指 China Standard Time(UTC+8),但在美国可能指 Central Standard Time(UTC-6),所以不能单靠缩写判断,得看数字偏移。
如果只想要偏移量数字(如 +0800),用:date +%z
如果只想要带符号的小时数(如 +08),用:date +%:z(较新 GNU coreutils 支持;旧系统可能不识别)
date 格式化字符串中常用时区相关字段
这些格式符必须配合 + 使用,例如 date +"%Z %z"。
-
%Z:时区缩写(如CST、EDT、CEST),依赖系统 locale 和时区数据库,不可靠作判断依据 -
%z:UTC 偏移量,格式为+HHMM或-HHMM(如+0800),稳定可用 -
%:z:带冒号的偏移(如+08:00),需 GNU date ≥ 8.25 -
%Z和%z可能不一致:比如系统设为Asia/Shanghai,但%Z显示CST,而%z固定输出+0800
为什么 date 显示的时区有时看起来“错”了
常见现象:明明设置了 Asia/Shanghai,date 却显示 CST 或 UTC,甚至时间不对。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
原因包括:
- 系统时区文件未正确链接:
/etc/localtime不是指向/usr/share/zoneinfo/Asia/Shanghai的软链或拷贝 - 用户级
TZ环境变量干扰:比如某 shell 中执行过TZ=UTC date,后续未清除,会影响当前会话 - 使用了
sudo date但没传环境变量:root 用户的TZ可能和普通用户不同 -
timedatectl和date不同步:systemd 系统建议优先用timedatectl status查真实状态,date只反映当前 shell 解析结果
想临时切换时区看效果?别改系统,用 TZ 环境变量
这是最安全、最轻量的做法,不影响全局设置,只作用于当前命令。
例如查看纽约时间:TZ=America/New_York date
查看伦敦时间:TZ=Europe/London date +"%Y-%m-%d %H:%M:%S %Z %z"
注意点:
-
TZ值必须是/usr/share/zoneinfo/下存在的路径(如America/Chicago),不能写成CST6CDT这类老式 POSIX 格式(除非你明确需要) - 若要同时设置时间和时区(比如设为纽约时间 2026-04-17 00:00:00),得用:
sudo TZ=America/New_York date -s "2026-04-17 00:00:00";单独date -s不读TZ -
TZ对hwclock无效,硬件钟始终按 UTC 或本地时间存,取决于/etc/adjtime配置
真正容易被忽略的是:时区设置和硬件时钟模式(UTC vs local)是两件事。很多问题其实出在 /etc/adjtime 里写了 LOCAL 却又用 systemd 管理,导致 timedatectl 和 date 表现不一致。查这个比反复调 date 格式更治本。










