我正在使用 ActiveSupport 的 Timezone 类来查找 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:00 从 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