Як отримати часову позначку UTC у Ruby?
Як отримати часову позначку UTC у Ruby?
Відповіді:
time = Time.now.getutc
Обгрунтування: В моїх очах часова марка - це саме те, що: момент у момент. Це можна точно представити об’єктом. Якщо вам потрібно щось інше, скалярне значення, наприклад секунди з часу епохи Unix, інтервали 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
. Чорт забирай, ви можете навіть кинути , to_s.sub('.','')
щоб позбутися від десяткового дробу, або виконати приведення типу , як це: 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 через різниці часових поясів.