Shell
了解 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
NoOfHours = 144(24*6)
-bash-5.0$ TZ="GMT+144" date Fri Feb 26 14:59:47 GMT 2021
NoOfHours = 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
該
TZ
變數在 POSIX 下定義為範圍從 -24 到 +24:小時應介於 0 和 24 之間,分鐘(和秒)(如果存在)介於 0 和 59 之間。使用此範圍之外的值的結果是未指定的。如果前面有“-”,則時區應位於本初子午線以東;否則,它應為西(可以由可選的前面的 ‘+’ 指示)。
GNU 和其他人已將此範圍擴展到 ±167 小時:
時間欄位的小時部分的範圍可以從 -167 到 167;這是對 POSIX.1 的擴展,它只允許 0 到 24 的範圍
Solaris 11.4 在其文件方面似乎是嚴格的 POSIX ,但在其實現方麵類似於 GNU(或者您可能
date
在測試中使用 GNU 變體)