Usando strftime
, você pode obter o número de segundos e acrescentar milissegundos fracionários (ou unidades menores, se necessário):
2.2.2 :001 > t = Time.new
=> 2015-06-02 12:16:56 -0700
2.2.2 :002 > t.strftime('%s%3N')
=> "1433272616888"
Observe que isso não é arredondado, ele trunca, como você pode ver com to_f
ou se chegar a microssegundos:
2.2.2 :003 > t.to_f
=> 1433272616.888615
2.2.2 :004 > t.usec
=> 888615
e a solução to_f
/ to_i
tem o mesmo problema:
2.2.2 :009 > (t.to_f * 1000).to_i
=> 1433272616888
então, se você realmente se preocupa com a precisão de milissegundos, uma aposta melhor pode ser to_f
com round
:
2.2.2 :010 > (t.to_f * 1000).round
=> 1433272616889
Dito isso, conforme observado nos documentos , "IEEE 754 double não é preciso o suficiente para representar o número de nanossegundos desde a época", portanto, se você realmente se importa, considere em to_r
vez de to_f
-
2.2.2 :011 > (t.to_r * 1000).round
=> 1433272616889
- embora se você estiver apenas arredondando para milissegundos, provavelmente estará bem.