En utilisant strftime
, vous pouvez obtenir le nombre de secondes et ajouter des fractions de millisecondes (ou des unités plus petites, si nécessaire):
2.2.2 :001 > t = Time.new
=> 2015-06-02 12:16:56 -0700
2.2.2 :002 > t.strftime('%s%3N')
=> "1433272616888"
Notez cependant que cela ne s'arrondit pas, il tronque, comme vous pouvez le voir avec to_f
ou si vous sortez en microsecondes:
2.2.2 :003 > t.to_f
=> 1433272616.888615
2.2.2 :004 > t.usec
=> 888615
et la solution to_f
/ to_i
a le même problème:
2.2.2 :009 > (t.to_f * 1000).to_i
=> 1433272616888
donc si vous vous souciez vraiment de la précision à la milliseconde, un meilleur pari peut être to_f
avec round
:
2.2.2 :010 > (t.to_f * 1000).round
=> 1433272616889
Cela dit, comme indiqué dans la documentation , "IEEE 754 double n'est pas assez précis pour représenter le nombre de nanosecondes depuis l'époque", donc si vous vous en souciez vraiment , considérez to_r
au lieu de to_f
-
2.2.2 :011 > (t.to_r * 1000).round
=> 1433272616889
- bien que si vous arrondissez seulement aux millisecondes, vous allez probablement bien.