私は ActiveSupport の Timezone クラスを使用して、タイムゾーンのオフセットを見つけています。
novdate = Date.new(2012,11,04)
offset_in_seconds = ActiveSupport::TimeZone['Eastern Time (US & Canada)'].at(novdate.to_time.midnight+3.hours).utc_offset
問題は、offset_in_seconds がローカル マシンと heroku サーバーで異なることです。なぜこれが起こっているのかわかりません。Rails の application.rb ファイルに config.time_zone = 'Eastern Time (US & Canada)' を設定しました。特定の日付のタイムゾーン オフセットを正確かつ一貫して取得するにはどうすればよいですか? 上記の時間に 3 時間を追加しているのは、特定の日付の午前 3 時に DST から非 DST に時間を変更する必要があるためです。
-- ローカルの Rails コンソールからの表示 --
novdate = Date.new(2012,11,04)
ActiveSupport::TimeZone['Eastern Time (US & Canada)'].at(novdate.to_time.midnight+1.hours)
=> Sun, 04 Nov 2012 01:00:00 EDT -04:00
ActiveSupport::TimeZone['Eastern Time (US & Canada)'].at(novdate.to_time.midnight+2.hours)
=> Sun, 04 Nov 2012 01:00:00 EST -05:00
ActiveSupport::TimeZone['Eastern Time (US & Canada)'].at(novdate.to_time.midnight+3.hours)
=> Sun, 04 Nov 2012 02:00:00 EST -05:00
-- heroku rails コンソールからの出力 ---
ActiveSupport::TimeZone['Eastern Time (US & Canada)'].at(novdate.to_time.midnight+4.hours)
=> Sun, 04 Nov 2012 00:00:00 EDT -04:00
ActiveSupport::TimeZone['Eastern Time (US & Canada)'].at(novdate.to_time.midnight+5.hours)
=> Sun, 04 Nov 2012 01:00:00 EDT -04:00
ActiveSupport::TimeZone['Eastern Time (US & Canada)'].at(novdate.to_time.midnight+6.hours)
=> Sun, 04 Nov 2012 01:00:00 EST -05:00