101 votes

Comment obtenir le temps écoulé en millisecondes en Ruby ?

Si j'ai un Time objet obtenu à partir de :

Time.now

et que plus tard j'instancie un autre objet avec la même ligne, comment puis-je voir combien de millisecondes se sont écoulées ? Le deuxième objet peut être créé au cours de la même minute, des minutes suivantes ou même des heures.

139voto

ezpz Points 5273

Comme nous l'avons déjà dit, vous pouvez opérer sur Time comme s'il s'agissait de valeurs numériques (ou à virgule flottante). Ces opérations aboutissent à une seconde résolution qui peut être facilement convertie.

Par exemple :

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

Vous devrez décider s'il convient de le tronquer ou non.

3 votes

Ajoutez un to_i et vous obtenez un nombre entier, par exemple : ((finish - start) * 1000.0).to_i

0 votes

finish.to_f - start.to_f ?

1 votes

finish - start donne la virgule flottante ; .to_f serait redondant.

61voto

phlipper Points 1354

Vous pouvez ajouter un peu de sucre de syntaxe à la solution ci-dessus avec ce qui suit :

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

32voto

Novalink Points 454

Je pense que la réponse est mal choisie, cette méthode donne des secondes et non des millisecondes.

t = Time.now.t­o_f
=> 1382471965.146

Ici, je suppose que les valeurs flottantes sont les millisecondes.

1 votes

La réponse choisie est correcte. En utilisant l'addition ou la soustraction sur Time.now traite le temps comme des valeurs à virgule flottante, avec des secondes avant la virgule et jusqu'à des nanosecondes après la virgule (bien que nsec puisse ne pas être tout à fait exact). En multipliant cette valeur par 1000.0 donne des millisecondes.

1 votes

Oui, mais donner seulement "Time.now" est inexact et ne répond pas précisément à la question.

16voto

Ryan McGeary Points 76053
DateTime.now.strftime("%Q")

Exemple d'utilisation :

>> DateTime.now.strftime("%Q")
=> "1541433332357"

>> DateTime.now.strftime("%Q").to_i
=> 1541433332357

13voto

StevenTen Points 94

Pour obtenir le temps en millisecondes, il est préférable d'ajouter .round(3) Il sera donc plus précis dans certains cas :

puts Time.now.to_f # => 1453402722.577573

(Time.now.to_f.round(3)*1000).to_i  # => 1453402722578

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X