ミリ秒の精度で時刻を表示する

ちょっと“実行時間を確認したい”ときに便利なTime.nowですが、秒の精度でしか表示できません。

>> Time.now
=> Sat Oct 30 01:46:23 +0900 2010

ボトルネックを探しているときなど、秒だと精度が足りないというときは、Time#usec*1を組み合わせることでマイクロ秒の精度を得られます。

>> Time.now.usec
=> 323167

Time#usecそのものはマイクロ秒しか返さない*2ので、Time.nowと組み合わせてこんな風に使いましょう。

>> Time.now.instance_eval { '%s.%03d' % [strftime('%Y/%m/%d %H:%M:%S'), (usec / 1000.0).round] }
=> "2010/10/30 02:12:42.827"

*1:usecの精度は環境に依存します。最後の3桁がすべて0で、実質的にはミリ秒までの精度しか得られないこともあります。

*2:0〜999999の範囲で繰り返します。