เมื่อใช้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
- แม้ว่าคุณจะปัดเศษเป็นมิลลิวินาทีคุณก็คงสบายดี