coreutilの日付はどのようにそのような奇妙な結果を得るのですか?

coreutilの日付はどのようにそのような奇妙な結果を得るのですか?

date「2時間」のような表現を7200のような秒数に変換しようとしています。次の呼び出しでこれを行うことができると思います。

date -d "1970-01-01 00:00:00 + 2 hours" +"%s"

ところで、これを行うと非常に奇妙な結果が現れました。 (私のものには/etc/timezone「Europe / Paris」が含まれているので、これを使用してTZUTC時間を強制します。)

omega:~$ TZ=utc date -d "1970-01-01 00:00:00" +"%s"             
0
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + 0 minutes" +"%s"
60
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + -1 minutes" +"%s" 
3660
omega:~$ TZ=utc date -d "1970-01-01 00:00:00 + 1 minutes" +"%s" 
-3540

date最初の結果は十分に合理的ですが、最後の3つの結果をどのように得るかは本当に混乱しています。この結果の間の論理を理解する人はいますか?

ベストアンサー1

+ xタイムゾーン指定子を提供するとします(たとえば、2013-04-25 19:52:36 +4UTCより4時間早いタイムゾーンで有効なタイムスタンプを検討してください)。

その後、「分」という言葉を見て、それを分と同義語として扱うので、1分後に通知します。

明示的なタイムゾーン指定子を入力すると機能します。

anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC" +"%s"   
0
anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + 0 minutes" +"%s"
0
anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + -1 minutes" +"%s" 
-60
anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 UTC + 1 minutes" +"%s" 
60

UTC後ろの秒フィールドを参照してください。 2番目の項目を入力することもできます+0

anthony@Zia:~$ TZ=utc date -d "1970-01-01 00:00:00 +0 + -1 minutes" +"%s"
-60

...しかし、少なくとも個人的には読みにくいです。

またはZ秒の後に追加することもできます。上記の例では、実際にTZ環境変数をUTCに設定する必要はありません。

おすすめ記事