Con strftime
, puede obtener la cantidad de segundos y agregar milisegundos fraccionarios (o unidades más pequeñas, si es necesario):
2.2.2 :001 > t = Time.new
=> 2015-06-02 12:16:56 -0700
2.2.2 :002 > t.strftime('%s%3N')
=> "1433272616888"
Sin embargo, tenga en cuenta que esto no se redondea, se trunca, como puede ver con to_f
o si sale a microsegundos:
2.2.2 :003 > t.to_f
=> 1433272616.888615
2.2.2 :004 > t.usec
=> 888615
y la solución to_f
/ to_i
tiene el mismo problema:
2.2.2 :009 > (t.to_f * 1000).to_i
=> 1433272616888
así que si realmente le importa la precisión de milisegundos, una mejor apuesta puede ser to_f
con round
:
2.2.2 :010 > (t.to_f * 1000).round
=> 1433272616889
Dicho esto, como se indica en los documentos , "IEEE 754 double no es lo suficientemente preciso para representar el número de nanosegundos desde la Época", así que si realmente te importa, considera en to_r
lugar de to_f
:
2.2.2 :011 > (t.to_r * 1000).round
=> 1433272616889
- aunque si solo está redondeando a milisegundos probablemente esté bien.