Converter o registro de data e hora em segundos no bash

4

Até onde eu sei, as variáveis do bash não têm um certo tipo.

Meu problema é que preciso converter um registro de data e hora (sempre no formato: hh:mm:ss ) em um único número inteiro representando segundos.

Então eu cortei as partes hh , mm e ss em strings separadas e use expr para calcular o número inteiro em segundos como:

TIME=expr $HH \* 3600 + $MM \* 60 + $SS

Mas quando, e. $HH=00 , em seguida, expr não funcionará. É possível converter strings como 00 ou 01 em números inteiros?

    
por Markus 19.01.2014 / 14:17

2 respostas

3

Experimente awk . Por exemplo:

echo "00:20:40" | awk -F: '{ print ( * 3600) + ( * 60) +  }'

Então, se você tiver:

time="00:20:40"

então:

seconds=$(echo $time | awk -F: '{ print ( * 3600) + ( * 60) +  }')

e echo $seconds imprimirão 1240 .

    
por Radu Rădeanu 19.01.2014 / 14:46
2

Se você quiser converter a hora atual em segunda , tente este script

#!/bin/bash

let var=$(date +%H)*3600+$(date +%M)*60+$(date +%S)
echo $var

Ele converterá a hora atual em segundos (um inteiro).

Se você deseja converter uma seqüência de tempo arbitrária como HH:MM:SS em segundo, então é melhor usar Resposta de Radu Rădeanu . Eu poderia dar algo do jeito que você estava tentando,

Estou assumindo que você armazenou hora, min e segunda em HH , MM e SS e use o seguinte para armazenar o tempo em segundo em var

let var=HH*3600+MM*60+SS
    
por souravc 19.01.2014 / 14:34

Tags