Rails没有考虑夏令时

时间:2012-10-12 12:35:59

标签: ruby ruby-on-rails-3

ActiveSupport::TimeZone.new("Pacific Time (US & Canada)")
=> (GMT-08:00) Pacific Time (US & Canada)

...但是现在,在洛杉矶它是格林尼治标准时间-07:00因为夏令时。见http://www.timeanddate.com/worldclock/city.html?n=137

这是一个错误,我的设置中的错误,还是我不正确地创建了TimeZone对象?似乎无法弄清楚

2 个答案:

答案 0 :(得分:3)

想出来。结果是TimeZone对象 有一个'now'的概念:

tz = ActiveSupport::TimeZone.new("Pacific Time (US & Canada)")
=> (GMT-08:00) Pacific Time (US & Canada) 
tz.parse('8:00AM')
=> Fri, 12 Oct 2012 08:00:00 PDT -07:00

所以你仍然可以使用TimeZone创建具有适当偏移量的TimeWithZone对象 - 尽管它的to_s方法显示不正确的偏移量。

答案 1 :(得分:1)

我不相信ActiveSupport::TimeZone个对象有“现在”的概念。您可以使用::create以所需的utc_offset初始化TimeZone:

ActiveSupport::TimeZone.create("Pacific Time (US & Canada)", -(60 * 60 * 7))
#  => (GMT-07:00) Pacific Time (US & Canada)

在处理ActiveSupport::TimeWithZone对象时,现在与夏令时相关的概念更有意义。通过在application.rb中设置时区来了解Rails应用程序时区:

config.time_zone = 'Pacific Time (US & Canada)'

...并且您使用Time.zone.now,结果将考虑夏令时GMT-07:00。所以在这篇文章发表时:

Time.zone.now
=> Fri, 12 Oct 2012 07:03:51 PDT -07:00

Time.zone.now.class
=> ActiveSupport::TimeWithZone