$ date -d "Apr 1 2016 - 1 month" +%B
「3月」と言ってください。いいですね。 4月の直前の月が3月です。しかし、これを行うと:
$ date -d "$(date -d "Apr 1 2016") - 1 month" +%B
それは私に「2月」を与えた。これにより、より複雑なコードでエラーが発生しました。これらの2つのコマンドが異なる結果を表示するのはなぜですか?
答え1
シェルトレースをオンにすると、問題を確認できます。
+ date -d 'Apr 1 2016 - 1 month' +%B
March
++ date -d 'Apr 1 2016'
+ date -d 'Fri Apr 1 00:00:00 EDT 2016 - 1 month' +%B
February
内部コマンドの出力を使用すると、date
4月上旬になり、月を除くとEST / EDTの変更によって中断が発生します。
+ date -d 'Fri Apr 1 00:00:00 EDT 2016 - 1 month'
Mon Feb 29 23:00:00 EST 2016
もちろん、結果はローカルタイムゾーンの設定によって異なります。トレースをオンにするとタイムゾーンが表示されます(私の場合はEDT
)。
結果が異なる理由は、後者の場合はより多くの情報を提供してdate
より多くのパラメータを作成するためです。特定つまり、一日の特定の時間です。最初の部分ではこれを指定しないので、date
表示する日付/時刻を決定する方法にはさらに余地があります。