Data apropriada -d “segunda-feira seguinte”

1

Estou tentando escrever um roteiro rápido que descubra a data da próxima segunda-feira que não é hoje. Embora o comando date aceite essa expressão, ela parece interpretá-lo como equivalente a "esta segunda-feira". Ou seja, se hoje é segunda-feira, emite a data de hoje, caso contrário, emite segunda-feira da próxima semana.

Alguma idéia de como fazer isso com o comando date (ou realmente qualquer comando disponível para bash) sem recorrer à aritmética de datas?

Atualização : isso parece ser algo estranho no meu ambiente, pois várias pessoas mostraram o comando funcionando como esperado em seus sistemas. Isso é o que eu vejo:

$ date
Tue Jul 31 23:38:28 UTC 2012
$ date -d 'next tuesday'
Tue Jul 31 00:00:00 UTC 2012
$ date --version
date (GNU coreutils) 5.97

Parece que tenho uma versão antiga de data, talvez seja o meu problema ...

    
por Kris Pruden 01.08.2012 / 00:59

2 respostas

1

A data do GNU parece estar funcionando corretamente.

error@underground ~/Downloads $ date -d "next monday"
Mon Aug  6 00:00:00 EDT 2012
error@underground ~/Downloads $ date -d "next tuesday"
Tue Aug  7 00:00:00 EDT 2012
error@underground ~/Downloads $ date -d "next wednesday"
Wed Aug  1 00:00:00 EDT 2012
error@underground ~/Downloads $ date --version
date (GNU coreutils) 8.15

Verifique se o seu sistema realmente possui a data, a hora e o fuso horário corretos.

Verifique também se você está executando uma versão relativamente recente do GNU coreutils. O comportamento que você descreveu foi um bug em versões antigas do coreutils que foi corrigido na versão 6.0 .

date: a command like date -d '2006-04-23 21 days ago' would print the wrong date in some time zones. (see the test for an example)

    
por 01.08.2012 / 01:10
2

Tem certeza de que não há um problema em como você está executando o comando dentro do script, talvez faltando aspas ou algo dessa natureza? Não consigo reproduzir seu problema.

$ date
Tue Jul 31 19:08:50 EDT 2012
$ date -d "next tuesday"
Tue Aug  7 00:00:00 EDT 2012
$ date -d "this tuesday"
Tue Jul 31 00:00:00 EDT 2012
$ date --version
date (GNU coreutils) 8.5
    
por 01.08.2012 / 01:08