sintax rails escape ruby

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.t­o_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.