From: matz@... (Yukihiro Matsumoto) Date: 1999-10-29T17:01:14+09:00 Subject: [ruby-dev:8134] Re: Time accurate usec まつもと ゆきひろです In message "[ruby-dev:8133] Time accurate usec" on 99/10/29, Masaki Fukushima writes: |秒数をFloatで指定できますが、浮動小数点を介すると誤差のせいで指定 |できない値があるようです。 なるほど、気がつきませんでした。 |そこで、 | | Time.at(sec, usec) | |または | | Time.at([sec, usec]) | |のような形でマイクロ秒を直接指定できると嬉しいのですが。 了解です。1.5系ではそのようにしましょう。形式は Time.at(sec[, usec]) とします。2つ引数を指定した場合には双方が整数である必要があ ります。パッチもつけておきます。 |後者の形式だとrb_time_interval()を書き換えれば、selectのtimeoutな |ども同様の形式を許すようになりますね。 これはちょっと魅力かとも思ったんですが、より分かりにくくなる のみなので、採用しませんでした。 |Ruby本買いました。 |内容が充実し過ぎです ^_^; 初心者に勧めるにはちょっとheavyかなぁ... だって初心者向けの本じゃないもん(開き直り)。 なんてね、分からないうちは分かるところだけ読むと言うのでどう でしょうか? まつもと ゆきひろ /:|) --- time.c 1999/10/04 04:51:06 1.4 +++ time.c 1999/10/29 07:57:25 @@ -154,9 +154,17 @@ static VALUE -time_s_at(klass, time) - VALUE klass, time; +time_s_at(argc, argv, klass) + int argc; + VALUE *argv; + VALUE klass; { struct timeval tv; - VALUE t; + VALUE time, t; - tv = rb_time_timeval(time); + if (rb_scan_args(argc, argv, "11", &time, &t) == 2) { + tv.tv_sec = NUM2INT(time); + tv.tv_usec = NUM2INT(t); + } + else { + tv = rb_time_timeval(time); + } t = time_new_internal(klass, tv.tv_sec, tv.tv_usec); @@ -980,3 +988,3 @@ rb_define_singleton_method(rb_cTime, "new", time_s_now, 0); - rb_define_singleton_method(rb_cTime, "at", time_s_at, 1); + rb_define_singleton_method(rb_cTime, "at", time_s_at, -1); rb_define_singleton_method(rb_cTime, "gm", time_s_timegm, -1);