スケジューリング メソッドでは、(local_date、local_time、および local_time_zone) を取得し、対応する utc 時間を返す必要があります。これは、その日に夏時間が有効かどうかを説明するものです。
私は Time.zone を変更したくありません。なぜなら、スレッドセーフではあるものの、複数のリクエストにまたがって保持されるというまったく予想外の結果になるからです。これは悪いことです。
次の (0800 太平洋時間) は機能しません。最初の日 (10 月 1 日) は夏時間で、2 日目 (12 月 1 日) は夏時間ではありませんが、UTC (16:00) で同じ時刻を返すためです。時刻なので、UTC は異なるはずです
Time.new(2012, 10, 1, 8, 0, 0, ActiveSupport::TimeZone['Pacific Time (US & Canada)'].utc_offset).utc
# 2012-10-01 16:00:00 UTC <<<< should be 15:00
Time.new(2012, 12, 1, 8, 0, 0, ActiveSupport::TimeZone['Pacific Time (US & Canada)'].utc_offset).utc
# 2012-12-01 16:00:00 UTC
.utc メソッドが夏時間が有効かどうかを考慮に入れることを望んでいましたが、そうではありません。
Time オブジェクト、DateTime オブジェクト、TimeWith Zone などを使用する必要があるかどうかはわかりません。
===
注: Chronic gem (以下) を使用してそれを行う方法があります。しかし、組み込みの Ruby の Date および Time メソッドを使用して、同じ (たとえば、正しい) 結果を取得したいと考えています。
Chronic.time_class =ActiveSupport::TimeZone["Pacific Time (US & Canada)"]
Chronic.parse("10/1/2012 0800").utc
# 2012-10-01 15:00:00 UTC
Chronic.parse("12/1/2012 0800").utc
# 2012-12-01 16:00:00 UTC