Por que esses dois comandos de data estão gerando resultados diferentes?

9
$ date -d "Apr 1 2016 - 1 month" +%B

me dá "March", o que é ótimo - o mês que vem antes de abril é março. Se eu fizer isso, no entanto:

$ date -d "$(date -d "Apr 1 2016") - 1 month" +%B

me dá "fevereiro". Isso está causando um erro em algum código mais complexo que eu tenho. Por que esses dois comandos mostram resultados diferentes?

    
por Tal 20.02.2016 / 15:57

1 resposta

11

Você pode ver o problema ativando o rastreamento do shell:

+ 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

Quando você usa a saída do comando date interno, é no início de abril e quando subtrair um mês é executado na descontinuidade devido à alteração EST / EDT:

+ date -d 'Fri Apr  1 00:00:00 EDT 2016 - 1 month'
Mon Feb 29 23:00:00 EST 2016

Seus resultados, obviamente, variam de acordo com as configurações locais de fuso horário. Ativar o rastreio mostrará o fuso horário (no meu caso, EDT ).

O motivo pelo qual os resultados diferem é que, no último caso, você forneceu mais informações para date , tornou seu parâmetro mais específico , ou seja, a hora específica do dia. Na primeira parte, isso não foi especificado, dando a date mais liberdade sobre como determinar a data / hora a ser exibida.

    
por 20.02.2016 / 16:06

Tags