2012-04-14 8 views
2

通常、私のプロジェクトのタイムスタンプはTime.now.utcです。しかし、今回はTime.now.utcを使用するだけでは正確ではないようです。Ruby - Time.now.utcよりも正確なタイムスタンプ

Time.now.utcは第2レベルにあります(それは正しいですか?)、私が望むほど正確ではありません。

ミリ秒単位でタイムスタンプを生成する方法はありますか? Timeドキュメントから

答えて

5

お使いのシステムクロックに利用できる解像度を使用して作成されます作成されたオブジェクトなどは小数秒を含むことができます。

例:

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

=> "1334402161.334542" 
6

よるthe documentationへ:

時間は、エポック以降の分数と秒数、1970年1月1日午前〇時00 UTC

として内部的に格納されます

内部フロート表示には、to_f方法、例えば。

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" 

(理論的には、少なくとも、私は、Ruby 1.8上で動作するように%Lを取得することはできませんが、それはありません1.9)

+0

さらに精度を上げるために、6桁(マイクロ秒)で '%6N 'を使用できます。 [The docs](http://ruby-doc.org/core-2.3.0/Time.html#method-i-strftime)は最大24桁(yoctoseconds)の精度を表示しますが、 '%1000N'お望みならば。当然のことながら、あなたのCPUはその時間内に単一の命令を実行することさえできず、Rubyは多くのオーバーヘッドを追加するので、大きな精度は理論的なものに過ぎません。 –

関連する問題