回答:
この現象は、夏時間(夏時間)が原因で発生しています。
現在は1時間進んでいる夏時間であるため、3か月前の6月1日の午前0時直後を要求すると、夏時間ではなかったため、時間が1時間早くなります。数か月前。
GNU日付のドキュメントでは、相対日または月をそれぞれ要求する場合、開始点として正午と月の15をそれぞれ使用することにより、この問題を回避することを提案しています。例えば:
date +%y-%m-%d --date="$(date +%Y-%m-15) -3 month"
[root@web000c zfs_test]# date +%y-%m-%d --date='3 months ago'
14-03-01
[root@web000c zfs_test]# date
Sun Jun 1 01:00:15 CEST 2014
date
使用法に関するこの提案を見落としていると思われるため、スクリプトのいくつかをgrepする必要があると思います。
絶対的なタイミングが主な関心事である場合は、その目的のために存在するUTCを使用するのがおそらく最善です。Michaelの答えは、問題の内部で作業する必要がある場合に非常に役立ちますが、通常はできる限り完全に回避することをお勧めします。
システムがデフォルトでUTCに設定されていない場合、タイムゾーンを渡す最も簡単な方法は、コマンドにTZ
環境変数をプレフィックスすることです。これにより、ゾーンスイッチが1つのコマンドに制限され、変数が後続のコマンドに漏れることがなくなります。
$ NOW=$(date '+%s')
$ date -d @$NOW
Wed Jun 11 23:44:35 EDT 2014
$ TZ=UTC date -d @$NOW
Thu Jun 12 03:44:35 UTC 2014
次の例に示すように、変数をエクスポートすると、トラブルシューティングが非常に混乱する可能性があるため、行うべきではありませんTZ
。
$ export TZ=UTC
$ date -d @$NOW
Thu Jun 12 03:44:35 UTC 2014
$ TZ=EDT date -d @$NOW
Thu Jun 12 03:44:35 EDT 2014
コンピューターが動作していると考える特定の年、および「1か月前、2か月前、3か月前」のテストで選択した特定の日に、はい-2月29日の検出である可能性があります。エラーですが、..
さて、今日は2014-06-01ではありません。再試行。コンピューターの日付を2013-06-01に設定します。再試行。
コンピューターの日付を2014-09-01に設定します。再試行。
MDY
形式で提供する場合は、/
esを使用して区切ります。さらに良いことに、私たちは国際的なコミュニティであるため、などの適切なISO日付を使用してください2014-09-01
。
date
いえ、ツールではそうではありません...