За допомогою 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 подвійний мало точні , щоб представити число наносекунд , починаючи з епохи», так що якщо ви на самому справі на самому ділі все одно, розглянемо to_r
замість to_f
-
2.2.2 :011 > (t.to_r * 1000).round
=> 1433272616889
- хоча, якщо ви округлюєте лише до мілісекунд, ви, мабуть, добре.