Compute Soma da Data

1

Um script de terceiros usado atrai informações com base no número de minutos que um determinado trabalho executa. Eu preciso inserir essa entrada no script.

E.g
Aqui está um exemplo

    export etool_start='date +"%Y%m%d%H%M:"'  

Meu script principal será executado entre as horas de início e término.

    export etool_end='date +"%Y%m%d%H%M"'

A saída dos resultados acima será semelhante a este 201607050220: 201607050230. O horário é de 0220 a 0230. Meu script não aceita este tipo de data e aceita apenas alguns minutos como este -0010 (10 minutos). Como posso criar uma matemática para me ajudar a obter esse resultado? O tempo que dei é apenas um exemplo, o intervalo de amostragem pode ser de 2 a 120 minutos por dia. Como posso usar o comando date para obter esse tipo de saída?

Por favor ajude.

Obrigado.

    
por Super 06.07.2016 / 06:08

2 respostas

0

No bash:

$ export etool_starting='date -u +"%s"'  
$ export etool_ending='date -u +"%s"'

Se apenas alguns minutos forem necessários:

$ printf '%05d\n' "$(( (etool_starting - etool_ending) / 60 ))"
-0120       ### If 120 minutes have elapsed in between.
    
por 06.07.2016 / 06:42
2

É muito mais simples medir o tempo em segundos desde a época ( +%s ). Em seguida, o tempo decorrido em segundos encontrado apenas por subtração e conversão de segundos para minuto requer divisão por 60:

export etool_start=$(date +"%s")
do_stuff_with_etool
export etool_stop=$(date +"%s")
echo "elapsed time=$(( (etool_stop - etool_start)/60 )) minutes"

Se você precisa dos tempos em forma humana, pode convertê-los. Usando o GNU date :

$ date -d "@$etool_start"
Tue Jul  5 21:30:19 PDT 2016

Ou:

$ date -d "@$etool_start"  "+%Y%m%d%H%M"
201607052130

Mais sobre formatação

Para expressar o tempo decorrido em minutos em diferentes formatos, podemos usar printf . Por exemplo, para produzir o tempo decorrido com quatro dígitos, podemos usar o formato %04i :

$ printf '%04i\n' "$(( ($etool_stop - $etool_start)/60 ))" 
0001

Um formato de %4i nos daria um inteiro (i) em quatro caracteres. Se queremos zeros à esquerda em vez de espaços à esquerda, usamos %04i .

Se quisermos o sinal oposto para o número:

$ printf '%05i\n' "$(( ($etool_start - $etool_stop)/60 ))" 
-0035

Como o sinal de menos requer um caractere extra, aumentamos o espaço alocado de 4 para 5: %05i .

Mais resolução

Porque o exemplo acima usou a aritmética de bash, que é somente inteiro. Se você quiser o tempo decorrido em minutos com frações de um minuto, outra ferramenta, como bc , pode ser usada:

$ echo "($etool_stop - $etool_start)/60" | bc -l
1.38333333333333333333

O que são segundos desde a época?

De man date , segundos desde a época, é definido por:

%s
seconds since 1970-01-01 00:00:00 UTC

Como é definido dessa maneira, o fuso horário local é irrelevante. Conseqüentemente, computá-lo no "fuso horário local" ou no horário universal, -u , não faz diferença:

$ date +%s; date -u +%s
1467780345
1467780345
    
por 06.07.2016 / 06:38

Tags