rails - ¿Cómo puedo obtener el tiempo transcurrido en milisegundos en Ruby?
haml to html (8)
Si tengo un objeto Time
obtenido de:
Time.now
y luego instanciar otro objeto con esa misma línea, ¿cómo puedo ver cuántos milisegundos han pasado? El segundo objeto se puede crear en el mismo minuto, durante los próximos minutos o incluso horas.
Como ya se dijo, puede operar en objetos Time
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
Tendrá que decidir si truncar eso o no.
Creo que la respuesta se eligió incorrectamente, ese método da segundos, no milisegundos.
t = Time.now.to_f
=> 1382471965.146
Aquí supongo que el valor flotante son los milisegundos
Intenta restar el primer Time.now del segundo. Al igual que:
a = Time.now
sleep(3)
puts Time.now - a # about 3.0
Esto le da un número de punto flotante de los segundos entre las dos veces (y con eso, los milisegundos).
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 no tomaría el desvío a través de tierra flotante. Por lo tanto, mi enfoque sería:
irb(main):038:0> t8 = Time.now
=> Sun Nov 01 15:18:04 +0100 2009
irb(main):039:0> t9 = Time.now
=> Sun Nov 01 15:18:18 +0100 2009
irb(main):040:0> dif = t9 - t8
=> 13.940166
irb(main):041:0> (1000 * dif).to_i
=> 13940
Al multiplicar por un número entero 1000 se conserva perfectamente el número fraccionario y también puede ser un poco más rápido.
Si está tratando con fechas y horas, puede necesitar usar la clase DateTime . Esto funciona de manera similar pero el factor de conversión es 24 * 3600 * 1000 = 86400000 .
He encontrado que las funciones strtime y strftime de DateTime son invaluables para analizar y formatear cadenas de fecha / hora (por ejemplo, a / 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 encontradas en cualquier sistema Unix / Linux; y
Hay algunos más: ¡en particular, % L hace milisegundos!
Para obtener el tiempo en milisegundos, es mejor agregar .round(3)
, por lo que será más preciso en algunos casos:
puts Time.now.to_f # => 1453402722.577573
(Time.now.to_f.round(3)*1000).to_i # => 1453402722578
Puede agregar un poco de azúcar de sintaxis a la solución anterior con lo siguiente:
class Time
def to_ms
(self.to_f * 1000.0).to_i
end
end
start_time = Time.now
sleep(3)
end_time = Time.now
elapsed_time = end_time.to_ms - start_time.to_ms # => 3004
Time.now.to_f puede ayudarte, pero devuelve segundos.
En general, cuando se trabaja con puntos de referencia I:
- poner en variable la hora actual;
- inserte el bloque para probar;
- poner en una variable la hora actual, restando el valor anterior de tiempo actual;
Es un proceso muy simple, así que no estoy seguro de que realmente estés preguntando esto ...
%L
da milisegundos en rubí
require ''time''
puts Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L")
o
puts Time.now.strftime("%Y-%m-%d %H:%M:%S.%L")
le dará la marca de tiempo actual en milisegundos.