Utilisation de 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 n'arrondit pas, cela tronque, comme vous pouvez le voir avec to_f
ou si vous allez jusqu'aux microsecondes :
2.2.2 :003 > t.to_f
=> 1433272616.888615
2.2.2 :004 > t.usec
=> 888615
et le to_f
/ to_i
a le même problème ( to_i
n'est pas rond, il tronqué ) :
2.2.2 :009 > (t.to_f * 1000).to_i
=> 1433272616888
donc si vous tenez vraiment à une précision de l'ordre de la milliseconde, un meilleur pari peut être to_f
con round
:
2.2.2 :010 > (t.to_f * 1000).round
=> 1433272616889
Cela dit, comme noté dans les docs le double de l'IEEE 754 n'est pas assez précis pour représenter le nombre de nanosecondes depuis l'époque", donc si vous voulez vraiment vraiment soins, envisager to_r
au lieu de to_f
--
2.2.2 :011 > (t.to_r * 1000).round
=> 1433272616889
-- Mais si vous n'arrondissez qu'à la milliseconde, tout va probablement bien.