ミリ秒まで含んだ時刻文字列

YYYY年mm月dd日HH時MM分SS.xxx秒なら、「YYYYmmddHHMMSS.xxx」のようにミリ秒まで含んだ文字列を返すプログラムを書いてください。

エロと風俗情報満載 どう抜く?

というお題に対して以下のスクリプトが投稿されていた。
ただし、自分好みになるように少し修正してある。

puts Time.now.instance_eval { '%s.%03d' % [strftime('%Y%m%d%H%M%S'), (usec / 1000.0).round] }


「instance_eval」にブロックを渡すと
そのブロックはレシーバのオブジェクトのコンテキストで評価される。
つまり、「strftime」や「usec」は「Time.now」のコンテキストで評価される。


「Time#usec」はマイクロ秒を返すメソッドなので
1000.0 で割ることでミリ秒を実数で得られる。
でも僕の環境だと、「Time#usec」は必ず 1000 の倍数を返してくるので
1000 で割っても得られる結果は同じようだ。


実行結果はこんなの。

20080618190327.609