Por que esses comandos de 2 datas estão fornecendo resultados diferentes?


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

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

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

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


Ambos me deram #March
cuonglm

1
Conforme explicado por Thomas, isso depende do seu fuso horário. Meu horário de verão é alterado em 13 de março - o seu provavelmente não, portanto você pode não ver esse comportamento nas mesmas datas ou possivelmente se não houver alterações no horário de verão.
20416 Tal

Respostas:


11

Você pode ver o problema ativando o rastreamento de 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 datecomando interno , é no início de abril e, ao subtrair um mês, a descontinuidade ocorre devido à alteração do EST / EDT:

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

Seus resultados, é claro, variarão de acordo com as configurações de fuso horário local. Ativar o rastreamento mostrará o fuso horário (no meu caso EDT).

A razão pela qual os resultados diferem é que, no último caso, você forneceu mais informações datee tornou seu parâmetro mais específico , ou seja, a hora específica do dia. Na primeira parte, isso não foi especificado, dando datemais margem de manobra sobre como determinar a data / hora a ser exibida.


Agora percebo que isso tem a ver com o horário de verão (o meu está aqui: timeanddate.com/time/zone/canada/edmonton ), mas ainda não entendo por que o comando date parece estar interpretando a mesma data de maneira diferente em um subshell do que no shell principal. Se eu executar um script com:, date -d "Apr 1 2016"; date -d "$(date -d "Apr 1 2016")"obtenho exatamente o mesmo resultado, incluindo a mesma marca de fuso horário - por que a remoção de um mês de ambos resulta em resultados diferentes?
22416 Tal

Ah - sua última edição deixa claro. Obrigado
Tal
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.