を使用して前の日付を見つけようとします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バリアントを使用することもできます)。