私のスクリプトの1つで、特定の日付から2日後の日付を見つける必要があります。以下の内容を長い間問題なく使用してきましたが、dateコマンドで誤った値にドリルダウンするエラーが発生したのは今回が初めてです。
$ date -d 20140331" - 2 days" +%Y%m%d
期待される出力
20140329
実際の出力
20140328
「-2日」を使用すると予想される結果が出ますが、なぜ秒を引くのがうまくいかないのかを把握するのにまだ苦労していますか?
メモ:私のプロセスは正午に実行されるため、あちこちで1秒が短縮されるなど、極端な境界条件は表示されません。
追加情報
$ date --version
date (GNU coreutils) 5.97
Copyright (C) 2006 Free Software Foundation, Inc.
答え1
サーバーがBSTタイムゾーンで実行されているため、この問題は昨日発生したGMTからBSTへの移行に関連しています。日曜日の午前1時に時計がGMTからBSTに1時間前に移動しました(私たちは1時間を「失った」ので、日曜日には23時間しか残りませんでした)。 「2日前」と言えば、これを考慮すると日付が正確です。ただし、172800秒(48時間)後に移動すると、欠落している時間が土曜日23:00に戻ります。