Używając strftime, możesz uzyskać liczbę sekund i dołączyć ułamkowe milisekundy (lub mniejsze jednostki, jeśli to konieczne):
2.2.2 :001 > t = Time.new
=> 2015-06-02 12:16:56 -0700
2.2.2 :002 > t.strftime('%s%3N')
=> "1433272616888"
Zwróć jednak uwagę, że to nie zaokrągla, obcina, jak widać z to_flub jeśli wychodzisz do mikrosekund:
2.2.2 :003 > t.to_f
=> 1433272616.888615
2.2.2 :004 > t.usec
=> 888615
a to_f/ to_irozwiązanie ma ten sam problem:
2.2.2 :009 > (t.to_f * 1000).to_i
=> 1433272616888
więc jeśli naprawdę dbają o milisekundy dokładność, lepszy zakład może być to_fz round:
2.2.2 :010 > (t.to_f * 1000).round
=> 1433272616889
To powiedziawszy, jak zauważono w dokumentach , „IEEE 754 double nie jest wystarczająco dokładny, aby przedstawić liczbę nanosekund od Epoki”, więc jeśli naprawdę cię to obchodzi, rozważ to_rzamiast to_f-
2.2.2 :011 > (t.to_r * 1000).round
=> 1433272616889
- chociaż jeśli zaokrąglasz tylko do milisekund, prawdopodobnie jesteś w porządku.