了解 Unix 中的 TZ(时区)变量

了解 Unix 中的 TZ(时区)变量

我试图使用 查找较旧的日期TZ="GMT+NoOfHours" date。令我惊讶的是,当 NoOfHours >= 0 到 NoOfHours <= 167(返回早 1-7 天的日期)时,它绝对按预期工作。但是,当 NoOfHours 大于 167 时,它返回当前日期。我很想知道这种行为的原因,而不是其他可能的解决方案。

当前日期

-bash-5.0$ TZ="GMT" date
Thu Mar  4 14:59:42 GMT 2021

小时数 = 144(24*6)

-bash-5.0$ TZ="GMT+144" date
Fri Feb 26 14:59:47 GMT 2021

工作时间 = 168(24*7)

-bash-5.0$ TZ="GMT+168" date
Thu Mar  4 14:59:50 GMT 2021

而且,这让我很困惑!

-bash-5.0$ TZ="GMT+167" date
Thu Feb 25 15:59:54 GMT 2021

答案1

变量TZ已定义在 POSIX 下范围从 -24 到 +24:

小时应介于 0 到 24 之间,分钟(和秒)(如果存在)应介于 0 到 59 之间。使用此范围之外的值的结果未指定。如果前面有“-”,则时区应在本初子午线以东;否则,它应该是西(可以通过可选的前面的 '+' 来指示)。

GNU 和其他人有扩大了这个范围至 ±167 小时:

时间字段的小时部分的范围可以是 -167 到 167;这是 POSIX.1 的扩展,仅允许范围 0 到 24

Solaris 11.4 在其方面似乎严格遵循 POSIX文档,但在实现方面与 GNU 类似(或者您可能date在测试中使用 GNU 变体)

相关内容