Bằng cách sử dụng strftime
, bạn có thể nhận được số giây và thêm phần mili giây (hoặc các đơn vị nhỏ hơn, nếu cần):
2.2.2 :001 > t = Time.new
=> 2015-06-02 12:16:56 -0700
2.2.2 :002 > t.strftime('%s%3N')
=> "1433272616888"
Xin lưu ý rằng điều này không làm tròn, nó sẽ bị cắt bớt, như bạn có thể thấy với to_f
hoặc nếu bạn đi ra ngoài đến micro giây:
2.2.2 :003 > t.to_f
=> 1433272616.888615
2.2.2 :004 > t.usec
=> 888615
và to_f
/ to_i
giải pháp có cùng một vấn đề:
2.2.2 :009 > (t.to_f * 1000).to_i
=> 1433272616888
vì vậy nếu bạn thực sự quan tâm đến độ chính xác mili giây, bạn có thể đặt cược tốt hơn to_f
với round
:
2.2.2 :010 > (t.to_f * 1000).round
=> 1433272616889
Điều đó nói rằng, như đã lưu ý trong tài liệu , "IEEE 754 double không đủ chính xác để đại diện cho số nano giây kể từ Kỷ nguyên", vì vậy nếu bạn thực sự quan tâm, hãy xem xét to_r
thay vì to_f
-
2.2.2 :011 > (t.to_r * 1000).round
=> 1433272616889
- mặc dù nếu bạn chỉ làm tròn đến mili giây thì có lẽ bạn vẫn ổn.