From: Tanaka Akira Date: 2010-02-12T00:15:43+09:00 Subject: [ruby-dev:40405] Re: [Bug:trunk] rubyspec: Time#+ rounds micro seconds rather than truncates FAILED 2010年2月11日23:01 KOSAKI Motohiro : > > Timeの元データは何があるんでしょう?一番苦情がくるのは oldtime > newtime または oldtime > now > になってしまうケースで、oldtimeが精度落とすときに切り上げされていてnowが高精度だったりすると > 起こせそうな気がします。 すぐに思い出せるのは * 現在時刻 gettimeofday のマイクロ秒 clock_gettime のナノ秒 * ファイルのタイムスタンプ st_mtime などの秒 st_mtim などのナノ秒 * パケットのタイムスタンプ SCM_TIMESTAMP のマイクロ秒 SCM_TIMESTAMPNS のナノ秒 SCM_BINTIME の 2**(-64)秒 * Ruby 内 DateTime の有理数 * 各種フォーマット ISO 8601 は10進数で小数点以下任意桁秒 くらいかなぁ。 どれも正確に Time に変換できます。 まぁ、Time の中身は (概念的には) 有理数なんで。 > 個人的には切り捨てに一票で、理由は「え、思ってたよりちょっと古い時刻だった?そりゃ測定してるうちにも時間は > 経過するからねHAHAHA」でほとんどのケースは済んでしまうコーナーケースの少なさに利点があるかと。 なるほど。 まぁ、そのうち % ./ruby -ve ' t = Time.new(1989,3,3) p t, t + 0.3 + 0.7' ruby 1.9.2dev (2010-02-11 trunk 26640) [i686-linux] 1989-03-03 00:00:00 +0900 1989-03-03 00:00:00 +0900 が変だと言い出すひとが出てくるんじゃないかなぁ、というくらいの話なので、 現実的に切り捨てに利点が多いならデフォルトそっちというのはありうる 選択肢かなぁ。 それは丸めたいときに使えるメソッドがあることとは矛盾しませんが。 -- [田中 哲][たなか あきら][Tanaka Akira]