Si tengo un Time
objeto obtenido de:
Time.now
y luego instancia otro objeto con esa misma línea, ¿cómo puedo ver cuántos milisegundos han pasado? El segundo objeto puede crearse ese mismo minuto, durante los siguientes minutos o incluso horas.
Como ya se dijo, puede operar sobre Time
objetos como si fueran valores numéricos (o de coma flotante). Estas operaciones dan como resultado una segunda resolución que se puede convertir fácilmente.
Por ejemplo:
def time_diff_milli(start, finish)
(finish - start) * 1000.0
end
t1 = Time.now
# arbitrary elapsed time
t2 = Time.now
msecs = time_diff_milli t1, t2
Deberá decidir si truncarlo o no.
finish.to_f - start.to_f
?finish - start
produce punto flotante;.to_f
sería redundante.(t2 - t1).in_milliseconds
Puede agregar un poco de azúcar de sintaxis a la solución anterior con lo siguiente:
fuente
Creo que la respuesta se eligió incorrectamente, ese método da segundos, no milisegundos.
Aquí supongo que el valor flotante son los milisegundos
fuente
Time.now
es tratar el tiempo como valores de punto flotante con segundos antes del punto decimal y hasta nanosegundos después del punto decimal (aunque nsec podría no ser completamente exacto). Entonces, multiplicar ese valor por1000.0
produce milisegundos.Para obtener el tiempo en milisegundos, es mejor agregar
.round(3)
, por lo que será más preciso en algunos casos:fuente
La respuesta de ezpz es casi perfecta, pero espero poder agregar un poco más.
Geo preguntó sobre el tiempo en milisegundos; esto suena como una cantidad entera, y yo no tomaría el desvío a través de tierra de punto flotante. Entonces mi enfoque sería:
Multiplicar por un número entero 1000 conserva el número fraccionario perfectamente y puede ser un poco más rápido también.
Si está tratando con fechas y horas, es posible que deba usar la clase DateTime . Esto funciona de manera similar, pero el factor de conversión es 24 * 3600 * 1000 = 86400000 .
Encontré que las funciones strptime y strftime de DateTime son invaluables para analizar y formatear cadenas de fecha / hora (por ejemplo, hacia / desde registros). Lo que es útil saber es:
Los caracteres de formato para estas funciones (% H,% M,% S, ...) son casi los mismos que para las funciones C que se encuentran en cualquier sistema Unix / Linux; y
Hay algunas más: ¡En particular, % L hace milisegundos!
fuente
unknown
:)Uso de ejemplo:
fuente
Time.now.to_f puede ayudarte pero devuelve segundos.
En general, cuando trabajo con puntos de referencia, yo:
Es un proceso muy simple, así que no estoy seguro de que realmente estuvieras preguntando esto ...
fuente
%L
da milisegundos en rubío
le dará la marca de tiempo actual en milisegundos.
fuente
La respuesta es algo como:
sin embargo, el
Time.now
enfoque corre riesgo de ser inexacto. Encontré esta publicación de Luca Guidi:https://blog.dnsimple.com/2018/03/elapsed-time-with-ruby-the-right-way/
Por lo tanto, se recomienda usar
Process.clock_gettime
en su lugar. Algo como:Ejemplo:
fuente
Intente restar el primer tiempo ahora del segundo. Al igual que:
Esto le da un número de punto flotante de los segundos entre los dos tiempos (y con eso, los milisegundos).
fuente