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バリアントを使用することもできます)。

おすすめ記事