Se eu tiver um Time
objeto obtido de:
Time.now
e depois instanciar outro objeto com essa mesma linha, como posso ver quantos milissegundos se passaram? O segundo objeto pode ser criado no mesmo minuto, ao longo dos próximos minutos ou mesmo horas.
finish.to_f - start.to_f
?finish - start
produz ponto flutuante;.to_f
seria redundante.(t2 - t1).in_milliseconds
Você pode adicionar um pouco de açúcar sintático à solução acima com o seguinte:
fonte
Acho que a resposta foi escolhida incorretamente, esse método dá segundos, não milissegundos.
Aqui, suponho que o valor flutuante são os milissegundos
fonte
Time.now
é tratar o tempo como valores de ponto flutuante com segundos antes do ponto decimal e até nanossegundos após o ponto decimal (embora nsec possa não ser completamente preciso). Portanto, a multiplicação desse valor por1000.0
resulta em milissegundos.Para obter o tempo em milissegundos, é melhor adicionar
.round(3)
, para que seja mais preciso em alguns casos:fonte
A resposta do ezpz é quase perfeita, mas espero poder acrescentar um pouco mais.
Geo perguntou sobre o tempo em milissegundos; isso soa como uma quantidade inteira, e eu não faria o desvio por terra de ponto flutuante. Portanto, minha abordagem seria:
Multiplicar por um inteiro 1000 preserva o número fracionário perfeitamente e pode ser um pouco mais rápido também.
Se estiver lidando com datas e horas, pode ser necessário usar a classe DateTime . Isso funciona de forma semelhante, mas o fator de conversão é 24 * 3600 * 1000 = 86400000 .
Eu encontrei de DateTime strptime e strftime funções de valor inestimável na análise e formatação de seqüências de data / hora (por exemplo, para / de registros). O que é útil saber é:
Os caracteres de formatação para essas funções (% H,% M,% S, ...) são quase os mesmos que para as funções C encontradas em qualquer sistema Unix / Linux; e
Existem mais alguns: Em particular, % L faz milissegundos!
fonte
unknown
:)Exemplo de uso:
fonte
Time.now.to_f pode ajudá-lo, mas retorna segundos.
Em geral, ao trabalhar com benchmarks I:
É um processo muito simples, então não tenho certeza se você estava realmente perguntando isso ...
fonte
%L
dá milissegundos em rubiou
fornecerá o carimbo de data / hora atual em milissegundos.
fonte
A resposta é algo como:
No entanto, a
Time.now
abordagem corre o risco de ser imprecisa. Encontrei esta postagem de Luca Guidi:https://blog.dnsimple.com/2018/03/elapsed-time-with-ruby-the-right-way/
Portanto, é recomendável usar em seu
Process.clock_gettime
lugar. Algo como:Exemplo:
fonte
Tente subtrair o primeiro Time.now do segundo. Igual a:
Isso dá a você um número de ponto flutuante dos segundos entre os dois tempos (e com isso, os milissegundos).
fonte