macos 上配置 tz 环境变量可使当前 shell 及子进程按指定时区(如 asia/shanghai)解析时间,但不影响系统级时区、gui 应用及 launchd 服务;需通过 export tz=asia/shanghai 临时设置或写入 ~/.zshrc 永久生效。
macos 上配置 tz 环境变量,目的是让当前 shell 会话及由此启动的子进程(如 java 应用、脚本、命令行工具)按指定时区解析时间。但要注意:tz 只影响用户态程序,不改变系统级时区设置;macos 的系统时钟和图形界面仍以“系统偏好设置 > 通用 > 日期与时间”中设定的时区为准。
确认目标时区值
macOS 使用标准 IANA 时区名,上海对应的是 Asia/Shanghai(不是 Asia/Beijing 或 PRC)。可先验证是否可用:
- 运行
ls /usr/share/zoneinfo/Asia/Shanghai,有输出说明系统已内置该时区 - 临时测试:
TZ=Asia/Shanghai date,看输出是否为北京时间(+0800)
临时设置(当前终端有效)
在当前 Terminal 窗口里直接执行:
export TZ=Asia/Shanghai- 再运行
date或date -R检查是否显示 +0800 - 关闭终端后失效,适合调试或单次任务
永久设置(对新打开的终端生效)
根据你使用的 Shell 类型,在对应配置文件末尾添加一行:
-
Zsh(macOS Catalina 及之后默认):编辑
~/.zshrc,追加export TZ=Asia/Shanghai -
Bash(旧版 macOS 或手动切换):编辑
~/.bash_profile或~/.bashrc,追加同上内容 - 保存后,执行
source ~/.zshrc(或对应文件)立即生效
注意:TZ 不等于系统时区,也不影响所有服务
即使设置了 TZ,以下情况仍不受影响:
- 系统通知中心、日历、邮件等 GUI 应用——它们读取的是系统设置,不是环境变量
- launchd 启动的后台服务(如 cron 替代品
launchd)——默认不继承用户 Shell 的TZ - 某些硬编码时区的程序(如部分 Java 应用若显式调用
TimeZone.setDefault())











