Usando strftime
, puoi ottenere il numero di secondi e aggiungere frazioni di millisecondi (o unità più piccole, se necessario):
2.2.2 :001 > t = Time.new
=> 2015-06-02 12:16:56 -0700
2.2.2 :002 > t.strftime('%s%3N')
=> "1433272616888"
Nota però che questo non arrotonda, tronca, come puoi vedere con to_f
o se esci a microsecondi:
2.2.2 :003 > t.to_f
=> 1433272616.888615
2.2.2 :004 > t.usec
=> 888615
e la soluzione to_f
/ to_i
ha lo stesso problema:
2.2.2 :009 > (t.to_f * 1000).to_i
=> 1433272616888
quindi se ti interessa davvero la precisione del millisecondo, una scommessa migliore potrebbe essere to_f
con round
:
2.2.2 :010 > (t.to_f * 1000).round
=> 1433272616889
Detto questo, come indicato nella documentazione , "IEEE 754 doppio non è sufficientemente accurata per rappresentare il numero di nanosecondi dal Epoch", quindi se veramente veramente cura, considera to_r
invece che to_f
-
2.2.2 :011 > (t.to_r * 1000).round
=> 1433272616889
- anche se se stai arrotondando solo a millisecondi probabilmente stai bene.