Cálculo de data errado por data no Ubuntu 16, 20

Cálculo de data errado por data no Ubuntu 16, 20

A coisa mais estranha acontece no cálculo de datas por causa do que você vê abaixo; observe que adicionar um mês a 31 de outubro leva a dezembro! Isso não pode ser? Tenho o mesmo problema no Ubuntu 16 e 20. Esse problema também faz com que meu script de shell forneça a data errada, portanto não é apenas o agendador 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

Responder1

É assim que datefunciona, ao somar 1 monthsó aumenta o mês em um, no seu caso até 2021-11-31que é uma data que não existe então avança o resultado um dia para uma data válida ( 2021-12-01). Dedocumentação coreutils:

A confusão nas unidades pode causar problemas com itens relativos. Por exemplo, '2020-07-31 -1 mês' pode ser avaliado como 2020-07-01, porque 2020-06-31 é uma data inválida. Para determinar o mês anterior de forma mais confiável, você pode solicitar o mês anterior ao dia 15 do mês atual. Por exemplo:

informação relacionada