Como faço para converter uma data em milissegundos desde a época do Unix no bash?

7

Eu tenho uma data no formato:

22-Sep-2014 10:32:35

Eu preciso de um registro de data e hora de 13 dígitos, mas quando eu converto dessa maneira

time=$(date -d "$DATE" '+%s')

Eu recebo um número de 10 dígitos

Quando eu tento

tt=$(date -d "$DATE");
time=$($tt +'%s * 1000 + %-N / 1000000')

Eu obtenho

line 22: Mon: command not found
    
por Alexiel 22.09.2014 / 05:33

2 respostas

5

Sua segunda tentativa foi fechada, só é preciso dizer ao comando date para adicionar milissegundos ao final. Você pode fazer isso com o formatador %N . %N expande para nanossegundos e, em seguida, você pode apenas truncar isso usando %3N .
No entanto, observe que o tempo de entrada de seu exemplo não tem milissegundos, portanto você pode adicionar .000 ao final.
Supondo que isso não seja o que você deseja, veja um exemplo que fornece precisão em milissegundos:

$ DATE="22-Sep-2014 10:32:35.012"
$ date -d "$DATE" +'%s.%3N'
1411396355.012
    
por 22.09.2014 / 06:45
0

Eu entendi e é isso:

$date -u +'%Y-%m-%d %H:%M:%S.%3N'

e o abaixo é o mais curto do código acima:

$date -u +"%F %T.%3N

e a saída para ambos é como abaixo:

2017-05-12 23:10:54.268

O -u é apenas para o fuso horário UTC. Você pode removê-lo.

    
por 15.05.2017 / 19:16