Если у меня есть Time
объект, полученный от:
Time.now
а позже я создаю другой объект с той же строкой, как я могу узнать, сколько миллисекунд прошло? Второй объект может быть создан в ту же минуту, в течение следующих минут или даже часов.
Как уже говорилось, вы можете работать с Time
объектами, как если бы они были числовыми (или с плавающей запятой) значениями. Эти операции приводят к второму разрешению, которое можно легко преобразовать.
Например:
def time_diff_milli(start, finish)
(finish - start) * 1000.0
end
t1 = Time.now
# arbitrary elapsed time
t2 = Time.now
msecs = time_diff_milli t1, t2
Вам нужно будет решить, обрезать это или нет.
finish.to_f - start.to_f
?finish - start
дает плавающую точку;.to_f
будет лишним.(t2 - t1).in_milliseconds
Вы можете добавить немного синтаксического сахара к вышеуказанному решению следующим образом:
источник
Думаю, ответ выбран неправильно, этот метод дает секунды, а не миллисекунды.
Здесь я предполагаю, что плавающее значение - это миллисекунды.
источник
Time.now
означает обработку времени как значений с плавающей запятой с секундами до десятичной точки и до наносекунд после десятичной точки (хотя нсек может быть не совсем точным). Таким образом, умножение этого значения на1000.0
дает миллисекунды.Чтобы получить время в миллисекундах, лучше добавить
.round(3)
, чтобы в некоторых случаях было точнее:источник
Ответ ezpz почти идеален, но я надеюсь, что смогу добавить еще немного.
Гео спросил о времени в миллисекундах; это звучит как целое число, и я бы не стал идти в обход с плавающей запятой. Таким образом, мой подход был бы следующим:
Умножение на целое число 1000 отлично сохраняет дробное число и может быть немного быстрее.
Если вы имеете дело с датой и временем, вам может потребоваться класс DateTime . Это работает аналогично, но коэффициент преобразования 24 * 3600 * 1000 = 86400000 .
Я нашел функции DateTime strptime и strftime бесценными при синтаксическом анализе и форматировании строк даты / времени (например, в / из журналов). Полезно знать следующее:
Символы форматирования для этих функций (% H,% M,% S, ...) почти такие же, как для функций C, имеющихся в любой системе Unix / Linux; и
Есть еще несколько: В частности, % L обрабатывает миллисекунды!
источник
unknown
:)%L
дает миллисекунды в рубинахили
даст вам текущую временную метку в миллисекундах.
источник
Пример использования:
источник
Time.now.to_f может вам помочь, но возвращает секунды.
В общем, при работе с тестами я:
Это очень простой процесс, поэтому я не уверен, что вы действительно об этом спрашивали ...
источник
Ответ примерно такой:
Однако
Time.now
подход рискует оказаться неточным. Я нашел этот пост Луки Гуиди:https://blog.dnsimple.com/2018/03/elapsed-time-with-ruby-the-right-way/
Поэтому рекомендуется использовать
Process.clock_gettime
вместо него. Что-то вроде:Пример:
источник
Попробуйте вычесть первое Time.now из второго. Вот так:
Это дает вам число секунд с плавающей запятой между двумя моментами времени (а вместе с тем и миллисекунды).
источник