Bagaimana cara mendapatkan stempel waktu UTC di Ruby?
Bagaimana cara mendapatkan stempel waktu UTC di Ruby?
Jawaban:
time = Time.now.getutc
Rasional: Di mata saya, stempel waktu persis seperti itu: Sebuah titik waktu. Ini dapat secara akurat direpresentasikan dengan suatu objek. Jika Anda membutuhkan yang lain, nilai skalar, misalnya detik sejak zaman Unix, interval 100-ns sejak 1601 atau mungkin string untuk tujuan tampilan atau menyimpan stempel waktu dalam database, Anda dapat dengan mudah mendapatkannya dari objek. Tapi itu sangat tergantung pada tujuan penggunaan Anda.
Mengatakan bahwa »stempel waktu yang sebenarnya adalah jumlah detik sejak epoch Unix« sedikit kehilangan intinya, karena itu adalah salah satu cara untuk mewakili suatu titik waktu, tetapi juga membutuhkan informasi tambahan untuk mengetahui bahwa Anda berurusan dengan waktu dan bukan angka. Sebuah Time
objek memecahkan masalah ini dengan baik dengan merepresentasikan suatu titik waktu dan juga secara eksplisit tentang apa itu .
Format default tidak terlalu berguna, menurut saya. Saya lebih suka ISO8601 karena dapat diurutkan, relatif ringkas, dan dikenal luas:
>> require 'time'
=> true
>> Time.now.utc.iso8601
=> "2011-07-28T23:14:04Z"
/usr/share/ruby/2.0/time.rb
.
Biasanya stempel waktu tidak memiliki zona waktu.
% irb
> Time.now.to_i == Time.now.getutc.to_i
=> true
to_f
akan lebih baik
jika Anda memerlukan stempel waktu yang dapat dibaca manusia (seperti yang dimiliki migrasi rel) ex. " 20190527141340 "
Time.now.utc.to_formatted_s(:number) # using Rails
Time.now.utc.strftime("%Y%m%d%H%M%S") # using Ruby
Apa gunanya stempel waktu dengan perinciannya yang diberikan dalam hitungan detik? Saya merasa jauh lebih praktis bekerja dengan Time.now.to_f
. Heck, Anda bahkan mungkin melemparkan to_s.sub('.','')
untuk menyingkirkan titik desimal, atau melakukan typecast seperti ini: Integer(1e6*Time.now.to_f)
.
Integer(1e3*Time.now.to_f)
sehingga stempel waktu ruby sisi server saya sama dengan javascript sisi klienDate.now()
Time.utc(2010, 05, 17)
time = Time.zone.now()
Ini akan bekerja sebagai
irb> Time.zone.now
=> 2017-12-02 12:06:41 UTC
Cara yang tepat adalah melakukan a Time.now.getutc.to_i
untuk mendapatkan jumlah stempel waktu yang tepat karena hanya menampilkan bilangan bulat tidak harus selalu sama dengan stempel waktu utc karena perbedaan zona waktu.