Linux recebeu um timestamp, como obter o timestamp X dias atrás?

0

Como usar o comando date e receber um timestamp para obter o timestamp X dias atrás. Por exemplo, o carimbo de data / hora UTC é 1525192000 , desejo obter o timestamp 30 dias antes disso.

    
por daydayup 11.05.2018 / 07:20

1 resposta

3

Para começar, o seu carimbo de tempo está em segundos desde 1 de janeiro de 1970. 00:00:00 UTC é minha suposição, se não for, converta-o para isso.

Então, você tem que subtrair os segundos para os dias que você quiser.

stamp=1525192000
day=$((60*60*24))
echo $(($stamp - 30*$day))

Em seguida, você recebe um tempo de volta Unix, se isso precisar de conversão para data e hora do dia, talvez seja necessário considerar o horário de verão, e é aí que você pode precisar usar o utilitário date .

Note que você também pode usar date . Isso permite que você trabalhe com outros elementos de data facilmente, sem precisar de cálculos:

Com o GNU date :

date --date="$(date --iso-8601=s -d @1525192000) -30 days" +%s

Exemplo:

 $ date --date="$(date --iso-8601=s -d @1525192000)"
 Tue, May  1, 2018  7:06:01 PM
 $ date --date="$(date --iso-8601=s -d @1525192000) -30 days"
 Wed, Apr 1, 2018  7:06:01 PM
 $ date --date="$(date --iso-8601=s -d @1525192000) -30 days" +%s
 1523466380
 $ date --date="$(date --iso-8601=s -d @1525192000) -30 days -1 week -3 months" +%s
 1514309200

No FreeBSD e no macOS (o -j significa não tentar definir a data do sistema, legal e seguro)

date -j -f "%a %b %d %T %Z %Y" "$(date -r 1234567890)"  -v-30d "+%s"

EDIT: Obrigado, Kusalananda, OpenBSD e NetBSD não suportam -v .

    
por 11.05.2018 / 07:39

Tags