Adiciona milissegundos ao tempo existente do Unix

1

Eu tenho um script que retorna o tempo do Unix em segundos, por exemplo, 1374521719. Gostaria de aproveitar esse tempo e colocar milissegundos para isso. Outros posts mostram um exemplo simples disso com a hora atual:

echo $(($(date +%s%N)/1000000))

Quando meu script recebe a entrada da hora do Unix, como adicionar os milissegundos atuais (se isso faz sentido)?

    
por Tom 22.07.2013 / 22:45

1 resposta

2

Você pode converter o timestamp Unix que você possui (em segundos) em milissegundos e adicionar milissegundos a ele.

Para converter os segundos para milissegundos, basta multiplicar por 1000 (ou acrescentar "000", o que for mais conveniente).

Para adicionar sua própria contagem de milissegundos, você pode apenas usar o suporte do bash para expressões aritméticas. Para obter o número atual de milissegundos além do segundo, é possível usar o especificador de formato +%N da data, que gera nanossegundos além do segundo e dividir por 10 ^ 6 para obter milissegundos.

Juntando isso, se você já tiver um script ou função get_seconds , que gera o número de segundos desde a época, obtemos:

echo $(( ($(get_seconds) * 1000) + ($(date +%N) / 1000000) ))

     ^^^  ^^^^^^^^^^^^^^^^^^^^^     ^^^^^^^^^^^^^^^^^^^^^
     |    |                         |_ convert ns past sec to ms
     |    |
     |    |_ convert seconds to ms
     |
     |_ bash arithmetric expression

Observe que isso combina dois timestamps completamente distintos, de modo que, enquanto você obtém um número maior de dígitos (precisão), não aumenta a precisão no tempo informado. De fato, se (digamos) algo acontecer apenas no final do segundo, a primeira parte pode estar relacionada ao segundo X e a segunda parte pode estar relacionada ao segundo X + 1, o que pode fazer com que o valor resultante seja desligado em quase um segundo . (Você deve ter X.998 e, em vez disso, ter X.002 devido ao segundo limite).

Francamente, não consigo ver como isso poderia ser mais útil do que, digamos, acrescentar "500" aos segundos para obter os milésimos de segundo a metade do segundo (você ainda estará fora de algum valor, mas reduz o erro máximo em cerca de metade).

    
por 22.07.2013 / 23:31

Tags