From: Yoshikawa Date: 2008-09-01T16:39:07+09:00 Subject: [ruby-dev:36071] サマータイムでのsleepの動作について 吉川と申します。 RoRでアプリケーションを作成しています。 Windows環境で、時刻をサマータイムに設定しておくと、 夏時間から通常時間に切り替わる際にRubyのsleepが 正しく動作しないようですので、報告させていただきます。 具体的には、次のような動作になります。 - 例えば、ロンドンのタイムゾーンでは夏時間から通常時間に 切り替わる際に午前1時台が2回きます。1回目の1:59から 1分間sleepするためにsleep 60とすると、1分後ではなく 1時間後にsleepが復帰します - 通常プロセスでは発生しなくて、スレッドから呼び出された sleepの場合に発生します 以下の環境で確認しました。 - Windows XP SP2 - ruby 1.8.6 (2008-08-11 patchlevel 287) [i386-mswin32] - 確認方法 == test.rb == t = Thread.start do puts "#{Time.now} start" sleep 60 puts "#{Time.now} end" end t.join ========== > ruby test.rb Sun Oct 26 01:59:10 +0000 2008 start <--- 実際には1時間経過 Sun Oct 26 02:00:10 +0000 2008 end Rubyのソースを少し見てみましたが、win32/win32.cの gettimeofday()の中で、GetSystemTime()ではなく、 GetLocalTime()を使用しているため、ローカルタイムの 影響を受けているのではないでしょうか? よろしくお願いいたします。