如何在Ruby中以毫秒为单位获得stream逝的时间?
如果我有一个Time
对象从:
Time.now
后来我用同一行实例化另一个对象,我怎么能看到有多less毫秒通过? 第二个对象可以在同一分钟内在接下来的几分钟甚至几小时内创build。
如前所述,您可以在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
您将需要决定是否截断或不。
你可以在上面的解决scheme中添加一些语法糖,如下所示:
class Time def to_ms (self.to_f * 1000.0).to_i end end start_time = Time.now sleep(3) end_time = Time.now elapsed_time = end_time.to_ms - start_time.to_ms # => 3004
我认为答案是错误的select,该方法给予秒,而不是毫秒。
t = Time.now.to_f => 1382471965.146
这里我假设浮点值是毫秒
ezpz的答案几乎是完美的,但我希望我可以多加一点。
Geo问几毫秒的时间; 这听起来像一个整数量,我不会绕过浮点土地。 因此我的做法是:
irb(main):038:0> t8 = Time.now => Sun Nov 01 15:18:04 +0100 2009 irb(main):039:0> t9 = Time.now => Sun Nov 01 15:18:18 +0100 2009 irb(main):040:0> dif = t9 - t8 => 13.940166 irb(main):041:0> (1000 * dif).to_i => 13940
乘以一个整数1000可以完美保留分数,也可能会稍微快一点。
如果您正在处理date和时间,则可能需要使用DateTime类。 这工作原理类似,但转换因子是24 * 3600 * 1000 = 86400000 。
我发现DateTime的strptime和strftime函数在parsing和格式化date/时间string(例如到/从日志)中是非常有用的。 有什么方便知道的是:
-
这些函数(%H,%M,%S,…)的格式化字符几乎与任何Unix / Linux系统上的C函数相同。 和
-
还有一些:特别是, %L的毫秒数!
Time.now.to_f可以帮助你,但它返回秒。
一般来说,当使用基准I:
- 把当前时间放进去
- 插入要testing的块;
- 在当前时间内放入一个variables,减去前一个当前时间值;
这是一个非常简单的过程,所以我不确定你是真的在问这个…
要获得毫秒的时间,最好添加.round(3)
,所以在某些情况下会更准确:
puts Time.now.to_f # => 1453402722.577573 (Time.now.to_f.round(3)*1000).to_i # => 1453402722578
尝试从第二个减去第一个Time.now。 像这样:
a = Time.now sleep(3) puts Time.now - a # about 3.0
这给你一个两次之间的浮点数(以及那个毫秒)。
%L
给ruby毫秒
require 'time' puts Time.now.strftime("%Y-%m-%dT%H:%M:%S.%L")
要么
puts Time.now.strftime("%Y-%m-%d %H:%M:%S.%L")
会以毫秒为单位给你当前的时间戳。