2012-04-14 35 views
2

通常,我在我的项目中使用Time.now.utc作为时间戳。但是这一次它看起来不够准确,只能使用Time.now.utcRuby - 比Time.now.utc更准确的时间戳

看起来Time.now.utc在第二层(是否正确?),并不像我想要的那么准确。

是否有方法可以在毫秒级别生成时间戳?

回答

5

Time文档:

创建将使用您的系统时钟所能达到的分辨率要创建的对象,因此可能包括小数秒。

实例:

a = Time.new 
"%.6f" % a.to_f 

=> "1334402161.334542" 
6

根据the documentation

时间在内部存储为的秒级分,因为历元的数目,1970年1月1日00:00 UTC

您可以使用访问内部浮点数表示方法,例如

irb> Time.now.to_f 
=> 1334401921.06418 

或者你可以使用strftime方法打印出来很好,例如:

irb> Time.now.strftime("%Y-%m-%d %H:%M:%S.%L") 
=> "2012-04-14 21:20:58.100" 

(至少在理论上,我不能让%L对Ruby 1.8中工作,但它确实在1.9上工作)

+0

为了更加精确,您可以使用(例如)'%6N'作为6位数字(微秒)。 [The docs](http://ruby-doc.org/core-2.3.0/Time.html#method-i-strftime)显示的最大精度为24位(yoctoseconds),但您可以执行'%1000N'如果你想。当然,你的CPU甚至在这段时间内甚至不能执行单个指令,Ruby增加了很多开销,所以大的精度只是理论上的。 – 2016-03-15 13:48:55