Как получить метку времени UTC в Ruby?
Как получить метку времени UTC в Ruby?
Ответы:
time = Time.now.getutc
Обоснование: На мой взгляд, временная метка - это именно то: момент времени. Это может быть точно представлено с помощью объекта. Если вам нужно что-то еще, скалярное значение, например, секунды с начала эпохи Unix, интервалы 100 нс с 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
будет лучше
если вам нужна удобочитаемая временная метка (как у рельсовых миграций) ex. " 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)
так, чтобы моя временная метка на стороне сервера была такой же, как и на стороне клиента javascriptDate.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 из-за разницы часовых поясов.