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:00M11.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
相关产品推荐
相关产品推荐

