2016-09-06 24 views
5

W Ruby, jaki jest właściwy sposób na uzyskanie bieżącego czasu systemowego od epoki (1970) w milisekundach?Uzyskaj aktualny czas systemowy w milisekundach

Próbowałem Time.now.to_i, wydaje się, że nie jest to wynik, jakiego pragnę. Potrzebuję wynik wyświetlający milisekundy z typem long, a nie float lub double.

Odpowiedz

5
(Time.now.to_f * 1000).to_i 

Time.now.to_f pokazuje czas zawierający cyfry dziesiętne. Aby uzyskać liczbę milisekund, należy pomnożyć czas przez 1000.

3

Można łączyć to_i i usec. Pierwsza zwraca liczbę sekund od Epoki, ten ostatni podaje liczbę mikrosekund:

require 'time' 
t = Time.at(1473152006, 2000) 

t.to_i * 1000 + t.usec/1000 
#=> 1473152006002 

jest to równoznaczne z:

t.strftime('%s%L') 
#=> "1473152006002" 

W niektórych przypadkach, takich jak wyżej, to_f wprowadzi niewielkie błąd zmiennoprzecinkowy:

t.to_f * 1000 
#=> 1473152006001.9998 
(t.to_f * 1000).to_i 
#=> 1473152006001 
+0

Punkt stały można naprawić, zaokrąglając wartość. To również zamieni wartość float na int. '(Time.now.to_f * 1000) .round' –

+1

@kallax, który zawiedzie dla' Time.at (1473152006, 999) ' – Stefan

Powiązane problemy