วิธีรับ UTC timestamp ใน Ruby
วิธีรับ UTC timestamp ใน Ruby
คำตอบ:
time = Time.now.getutc
เหตุผล:ในสายตาของฉันเวลาที่แน่นอนคือ: จุดในเวลา สิ่งนี้สามารถแสดงได้อย่างถูกต้องกับวัตถุ หากคุณต้องการสิ่งอื่นใดค่าสเกลาร์เช่นวินาทีตั้งแต่ช่วงเวลา Unix epoch ช่วง 100-ns ตั้งแต่ปี 1601 หรืออาจเป็นสตริงสำหรับจุดประสงค์ในการแสดงหรือจัดเก็บการประทับเวลาในฐานข้อมูลคุณสามารถรับสิ่งนั้นได้จากวัตถุ แต่นั่นก็ขึ้นอยู่กับการใช้งานของคุณ
การบอกว่า»การประทับเวลาที่แท้จริงคือจำนวนวินาทีตั้งแต่ยุคที่ Unix หายไปเล็กน้อยเนื่องจากเป็นวิธีหนึ่งในการแทนจุดในเวลาหนึ่ง แต่ยังต้องการข้อมูลเพิ่มเติมเพื่อให้รู้ว่าคุณกำลังติดต่อด้วย เวลาและไม่ใช่ตัวเลข Time
วัตถุแก้ปัญหานี้ได้เป็นอย่างดีโดยเป็นตัวแทนของจุดในเวลาและยังเป็นที่ชัดเจนเกี่ยวกับสิ่งที่มันเป็น
คุณสามารถใช้: Time.now.to_i
.
การจัดรูปแบบเริ่มต้นไม่มีประโยชน์มากในความคิดของฉัน ฉันชอบ ISO8601 เนื่องจากสามารถจัดเรียงได้ค่อนข้างกะทัดรัดและเป็นที่ยอมรับอย่างกว้างขวาง:
>> require 'time'
=> true
>> Time.now.utc.iso8601
=> "2011-07-28T23:14:04Z"
/usr/share/ruby/2.0/time.rb
และมันอยู่ใน
โดยทั่วไปการประทับเวลาไม่มีเขตเวลา
% irb
> Time.now.to_i == Time.now.getutc.to_i
=> true
to_f
จะดีกว่า
หากคุณต้องการเวลาประทับที่มนุษย์อ่านได้ (เช่นการโยกย้ายรางรถไฟ) " 20190527141340 "
Time.now.utc.to_formatted_s(:number) # using Rails
Time.now.utc.strftime("%Y%m%d%H%M%S") # using Ruby
สิ่งที่ดีคือการประทับเวลาด้วยความละเอียดที่กำหนดในไม่กี่วินาที? Time.now.to_f
ผมพบว่ามันมีการปฏิบัติมากขึ้นกับการทำงานกับ Heck คุณอาจโยนto_s.sub('.','')
ที่จะได้รับการกำจัดของจุดทศนิยมหรือดำเนิน typecast Integer(1e6*Time.now.to_f)
เช่นนี้:
Integer(1e3*Time.now.to_f)
เพื่อให้การประทับเวลาฝั่งเซิร์ฟเวอร์ของฉันเหมือนกับ javascript ฝั่งไคลเอ็นต์Date.now()
Time.utc(2010, 05, 17)
time = Time.zone.now()
มันจะทำงานเป็น
irb> Time.zone.now
=> 2017-12-02 12:06:41 UTC
วิธีที่เหมาะสมคือการทำTime.now.getutc.to_i
เพื่อให้ได้จำนวนเวลาที่เหมาะสมเนื่องจากการแสดงจำนวนเต็มไม่จำเป็นต้องเหมือนกันกับการประทับเวลา utc เสมอเนื่องจากความแตกต่างของเขตเวลา