You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shell脚本中带夏令时的负时区TZ字符串设置方法

Shell中设置负偏移时区TZ字符串的方法

首先说最容易踩的坑:POSIX TZ规范的偏移符号和我们平时说的时区偏移符号是反的,这也是绝大多数人写不对的核心原因:

  • 平时说的UTC+N(东时区,当地比UTC快N小时),在TZ的偏移位要写-N
  • 平时说的UTC-N(西时区,当地比UTC慢N小时),在TZ的偏移位要写+N
    偏移支持非整小时配置,半小时、一刻钟都可以,格式直接写hh:mm就行,比如2个半小时就写2:30。

带夏令时的TZ字符串固定结构是:
标准时缩写<标准时偏移><夏令时缩写><夏令时偏移>,<夏令时启动规则>,<夏令时结束规则>

配置示例:加拿大纽芬兰时区

纽芬兰冬令时(标准时)是日常标注的UTC-3:30,夏令时是UTC-2:30,切换规则是每年3月第二个周日凌晨2点进夏令时、11月第一个周日凌晨2点回冬令时,对应配置命令直接写:

export TZ=NST+3:30NDT+2:30,M3.2.0/2,M11.1.0/2

每个字段对应含义:

  • NST:纽芬兰标准时间的缩写
  • +3:30:对应日常UTC-3:30的标准时偏移,注意这里符号是正的
  • NDT:纽芬兰夏令时的缩写
  • +2:30:对应日常UTC-2:30的夏令时偏移,符号同样为正
  • M3.2.0/2:夏令时启动时间:3月第2个周日的02:00
  • M11.1.0/2:夏令时结束时间:11月第1个周日的02:00

如果你要配置的是无夏令时的UTC-2:30(也就是你举例的UTC-2.5)时区,直接省略夏令时部分即可:

export TZ=CUSTOM+2:30

注意点

  • 环境变量名必须是大写TZ,参考示例里写的小写tz不会被系统识别,配了也不生效
  • 配置完直接执行date命令,看输出的时间、时区缩写对不对就行,不用额外重启服务或终端
  • 夏令时的切换时间规则里,M后面的三个数字分别是月份.当月第几个星期几.星期几序号,星期几序号0代表周日、1代表周一,以此类推,斜杠后面的数字是切换的具体小时数。

内容的提问来源于stack exchange,提问作者praveen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 19:12:29