Ubuntu 16、20 での日付による日付計算が間違っている

Ubuntu 16、20 での日付による日付計算が間違っている

日付の計算で最も奇妙なことが起こります。以下に示すように、10 月 31 日に 1 か月を追加すると 12 月になります。これはあり得ないことです。Ubuntu 16 と 20 でも同じ問題が発生します。この問題により、シェル スクリプトが間違った日付を返すことも発生するため、cron スケジューラだけの問題ではありません。

root@ubuntugc:/home/miuser# date -d "20210930+1 month" +%Y-%m-%d
2021-10-30
root@ubuntugc:/home/miuser# date -d "20211030+1 month" +%Y-%m-%d
2021-11-30
root@ubuntugc:/home/miuser# date -d "20211031+1 month" +%Y-%m-%d
2021-12-01

答え1

これは仕組みですdate。追加すると、1 month月が1つ増えるだけです。あなたの場合は2021-11-31存在しない日付なので、結果は1日進んで有効な日付(2021-12-01)に移動します。coreutils ドキュメント:

単位のあいまいさは、相対的な項目で問題を引き起こす可能性があります。たとえば、「2020-07-31 -1 か月」は、2020-06-31 が無効な日付であるため、2020-07-01 と評価される可能性があります。前月をより確実に判断するには、現在の月の 15 日の前の月を要求できます。例:

関連情報