época de data do GNU +% s vs. agora em frases de data e hora com cálculos incluindo meses?

1

Estou tentando fazer cálculos de data em um script de shell usando a data do gnu com frases de registro de data e hora e não consigo explicar essas diferenças. Alguém pode me esclarecer? Isso é um bug?

% date -u -d "now"
Fri Aug  2 15:07:16 UTC 2013

% date -u -d "1970-01-01 00:00:00 UTC  + 'date +%s' seconds"
Fri Aug  2 15:07:29 UTC 2013

% date -u -d "now -6 months -1 day"
Fri Feb  1 15:07:52 UTC 2013

% date -u -d "1970-01-01 00:00:00 UTC  + 'date +%s' seconds -6 months -1 day"
Tue Jan 29 15:08:03 UTC 2013

Eu esperava que o último significasse exatamente o mesmo que o anterior, pois% s é definido como "segundos desde 1970-01-01 00:00:00 UTC" na manpage.

    
por hkhl 02.08.2013 / 17:22

1 resposta

1

Parece que é um erro na ordem de operação. Se eu fizer este comando, funciona bem:

$ date -u -d "$(date -u -d "1970-01-01 00:00:00 UTC  + 'date +%s' seconds") \
     -6 months -1 day"

A execução disso gera resultados estranhos:

$ date -u -d "$(date +%s) seconds -6 months -1 day"
Sun Sep  3 07:48:54 UTC 2056

Mas proteger o $(date +%s) seconds com parens parece resolver o problema:

$ date -u -d "($(date +%s) seconds) -6 months -1 day"
Fri Feb  1 15:55:12 UTC 2013
    
por 02.08.2013 / 17:53