Sintaxe para usar tempos de época em um cálculo com o uso de '--date = STRING' do comando 'date'

2

Eu tenho um tempo representado como segundos desde 1970-01-01 00:00:00 UTC, como 1524884843 .

Eu quero ter o tempo, digamos, de um mês a partir do tempo especificado acima.

Normalmente, se eu quiser ter o tempo daqui a 1 mês, posso usar ...

root@beaglebone:~/bbbrtc# date
Sat Apr 28 03:12:54 UTC 2018
root@beaglebone:~/bbbrtc# date -d "now+1 month"
Mon May 28 03:12:57 UTC 2018

Eu também posso especificar uma hora de segundos de época no argumento -d prefixando-a com um @ como em ....

root@beaglebone:~/bbbrtc# date -d "@1524884843"
Sat Apr 28 03:07:23 UTC 2018

No entanto, quando tento combinar um tempo de época pré-fixado @ com um cálculo, recebo um erro ...

root@beaglebone:~/bbbrtc# date -d "@1524884843+1 month"
date: invalid date '@1524884843+1 month'

Qual é a sintaxe correta para combinar um tempo de época com um cálculo relativo?

    
por bigjosh 29.04.2018 / 19:51

3 respostas

0

Você pode colocar o cálculo entre parênteses ...

root@beaglebone:~/bbbrtc# date -d "@1524884843+(1 month)"
Sat Apr 28 03:07:23 UTC 2018
    
por 29.04.2018 / 19:51
0

A única maneira é usar uma conversão em duas etapas:

$ date -d "$(date -d "@1524884843") + 1 month"
Mon May 28 03:07:23 UTC 2018
    
por 30.04.2018 / 10:07
0

Com date do ast-open (possivelmente a data de embutimento do ksh93 dependendo de como ele foi construído e do ambiente):

$ date -d '#1234567890'
Fri Feb 13 23:31:30 GMT 2009
$ date -d "#1234567890 30 days"
Sun Mar 15 23:31:30 GMT 2009

(ast date não suporta deslocamentos expressos em meses (os meses não têm um tamanho fixo)).

Com o GNU date , você pode usar o método antigo (antes de @epoch support ser adicionado) onde você expressa o tempo de época como um deslocamento em segundos relativo a 1970-01-01 00:00:00 UTC:

$ date -d '1970-01-01T00:00:00Z + 1234567890 seconds'
Fri 13 Feb 23:31:30 GMT 2009
$ date -d '1970-01-01T00:00:00Z + 1234567890 seconds + 1 month'
Mon 16 Mar 23:31:30 GMT 2009

No entanto, note que 1 mês é 31 dias , presumivelmente porque date considera que o 1 mês de compensação é relativo a Jan 1970.

Se o seu date é o GNU e você gostaria do comportamento exibido para datas relativas ao mês em que um deslocamento de um mês fornece o mesmo dia do mês (supondo que haja um dia no mês seguinte) como a data de início (embora não necessariamente a mesma hora do dia, se houve alguma mudança de horário de verão no intervalo), então você provavelmente desejaria usar a abordagem de duas etapas de @ isaac .

    
por 30.04.2018 / 11:55