Используя strftime
, вы можете получить количество секунд и добавить дробные миллисекунды (или меньшие единицы, если необходимо):
2.2.2 :001 > t = Time.new
=> 2015-06-02 12:16:56 -0700
2.2.2 :002 > t.strftime('%s%3N')
=> "1433272616888"
Обратите внимание, что это не округляется, а обрезается, как вы можете видеть с помощью to_f
или, если вы выходите на микросекунды:
2.2.2 :003 > t.to_f
=> 1433272616.888615
2.2.2 :004 > t.usec
=> 888615
и решение to_f
/ to_i
имеет ту же проблему:
2.2.2 :009 > (t.to_f * 1000).to_i
=> 1433272616888
так что если вы действительно заботитесь о миллисекунды точности, лучше ставка может быть to_f
с round
:
2.2.2 :010 > (t.to_f * 1000).round
=> 1433272616889
Тем не менее, как отмечено в документации , «IEEE 754 double недостаточно точен для представления количества наносекунд с эпохи», поэтому, если вам действительно все равно, подумайте to_r
вместо to_f
-
2.2.2 :011 > (t.to_r * 1000).round
=> 1433272616889
- хотя, если вы округляете только до миллисекунд, вы, вероятно, в порядке.