如何在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的strptimestrftime函数在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") 

会以毫秒为单位给你当前的时间戳。