Como obtenho o tempo atual do Unix em milissegundos (ou seja, número de milissegundos desde a época do Unix, em 1º de janeiro de 1970)?
232
date +%s
retornará o número de segundos desde a época.
date +%s%N
retorna os segundos e os nanossegundos atuais.
date +%s%N | cut -b1-13
fornecerá o número de milissegundos desde a época - segundos atuais mais os três à esquerda dos nanossegundos.
e do MikeyB - echo $(($(date +%s%N)/1000000))
(dividir por 1000 gera apenas em microssegundos)
echo $(($(date +%s%N)/1000))
Você pode simplesmente usar
%3N
para truncar os nanossegundos para os três dígitos mais significativos (que são, em seguida, milissegundos):Isso funciona, por exemplo, no meu kubuntu 12.04.
Mas esteja ciente de que isso
%N
pode não ser implementado dependendo do seu sistema de destino. Por exemplo, testado em um sistema incorporado (rootfs do buildroot, compilado usando uma cadeia de ferramentas cruzada de braço não HF), não havia%N
:(E também o meu tablet Android (não enraizado) não tem
%N
).fonte
1397392146%3N
para1397392146%N
, mas a saída1397392146%3N
é o que eu realmente tinha visto no console do busybox do meu tablet Android. Você poderia explicar sua edição?date +%s.%3N
impressões1510718281.134
.date +%N
não funciona no OS X, mas você pode usar um dosruby -e 'puts Time.now.to_f'
python -c 'import time; print time.time()'
node -e 'console.log(Date.now())'
php -r 'echo microtime(TRUE);'
DateTime.utc_now() |> DateTime.to_unix(:millisecond)
wget -qO- http://www.timeapi.org/utc/now?\\s.\\N
date +%s000
fonte
node -e 'console.log(Date.now())'
php -r 'echo microtime(TRUE);'
wget -qO- http://www.timeapi.org/utc/now?\\s.\\N
date +%s000
coreutils
Apenas jogando isso lá fora, mas acho que a fórmula correta com a divisão seria:
fonte
Minha solução não é a melhor, mas funcionou para mim.
date +%s000
Eu só precisava converter uma data como 05/05/2012 para milissegundos.
fonte
Para as pessoas que sugerem executar programas externos para obter os mili segundos ... nesse ritmo, você também pode fazer o seguinte:
A questão é: antes de escolher qualquer resposta a partir daqui, lembre-se de que nem todos os programas serão executados em menos de um segundo. A medida!
fonte
date
necessários 3 ms para funcionar.Esta solução funciona no macOS.
se você considerar usar um script bash e tiver python disponível, poderá usar este código:
fonte
Se você estiver procurando uma maneira de exibir o período de execução do script, o seguinte fornecerá um resultado (não totalmente preciso):
O mais próximo possível do script, digite o seguinte
basetime=$(date +%s%N)
Isso fornecerá um valor inicial de algo como 1361802943996000000
No final do seu script, use o seguinte
echo "runtime: $(echo "scale=3;($(date +%s%N) - ${basetime})/(1*10^09)" | bc) seconds"
que exibirá algo como
runtime: 12.383 seconds
Notas:
(1 * 10 ^ 09) pode ser substituído por 1000000000 se você desejar
"scale=3"
é uma configuração bastante rara que obrigabc
a fazer o que você deseja. Há muito mais!Eu só testei isso no Win7 / MinGW ... Não tenho uma caixa * nix adequada à mão.
fonte
time <script>
Aqui está como obter tempo em milissegundos sem executar a divisão. Talvez seja mais rápido ...
Atualização: Outra alternativa no bash puro que funciona apenas com o
bash 4.2+
mesmo é acima, mas useprintf
para obter a data. Definitivamente, será mais rápido porque nenhum processo é extraído do principal.Outro problema aqui é que sua
strftime
implementação deve suportar%s
e%N
NÃO é o caso na minha máquina de teste. Vejaman strftime
para opções suportadas. Veja tambémman bash
para ver aprintf
sintaxe.-1
e-2
são valores especiais para o tempo.fonte
strftime(3)
não suporta,%N
então não há comoprintf
imprimir nanossegundos. Estou usando o Ubuntu 14.04.date
parece ser a opção mais confiável.O carimbo de data e hora mais preciso que podemos obter (pelo menos para o Mac OS X) é provavelmente o seguinte:
Mas precisamos ter em mente que leva cerca de 30 milissegundos para ser executado. Podemos reduzi-lo na escala da fração de 2 dígitos e, no início, calcular a sobrecarga média da leitura do tempo e removê-lo da medição. Aqui está um exemplo:
Você pode descomentar os comandos de eco para ver melhor como ele funciona.
Os resultados para este script são geralmente um destes 3 resultados:
fonte
Usar date e expr pode levá-lo até lá, ie
Basta expandi-lo para fazer o que quiser
Sei que isso não dá milissegundos desde a época, mas ainda pode ser útil como resposta para alguns casos, tudo depende do que você realmente precisa, multiplique por 1000 se precisar de um número de milissegundos: D
A maneira mais simples seria tornar um pequeno executável (de C f.ex.) e disponibilizá-lo para o script.
fonte
date
várias vezes. Em alguns casos, a data ou hora pode mudar entre as execuções à medida que seu comando é gravado. É melhor executardate
uma vez, analisar as peças e fazer seu cálculo. Uma das várias maneiras de fazer isso seriat=$(date +%H%M%S); (( x = ${t:0:2} * 3600 + ${t:2:2} * 60 + ${t:4:2} )); echo "$x"
. Isso usa a sintaxe do Bash, pois a pergunta é marcada como bash . Como você alude, sua resposta (e minha variação) dá apenas segundos para o dia atual até agora e não desde a época nem em milis.(repetir de cima)
date +%N
não funciona no OS X, mas você também pode usar:Perl (requer o módulo Time :: Format). Talvez não seja o melhor módulo de CPAN a ser usado, mas faz o trabalho. Time :: Format geralmente é disponibilizado com distribuições.
fonte
date
não pode ser usado e não há comandos somente do bash que atendam à necessidade.date
não pode ser usado como parte de sua resposta , eu removo meu voto negativo.Reunindo todas as respostas anteriores, quando estiver no OSX
você pode fazer como
fonte
Se você deseja um cálculo simples de shell, isso é fácil e portátil, usando a resposta acima:
fonte
Para linux alpino (muitas imagens do docker) e possivelmente outros ambientes linux mínimos, você pode abusar
adjtimex
:adjtimex
é usado para ler (e definir) variáveis de tempo do kernel. Comawk
você pode obter os microssegundos,head
você pode usar apenas os 3 primeiros dígitos.Não tenho ideia de quão confiável é esse comando.
Nota: Roubado descaradamente desta resposta
fonte