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

...但是现在,由于 DST,在洛杉矶是 GMT-07:00。见http://www.timeanddate.com/worldclock/city.html?n=137

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

4

2 回答 2

4

弄清楚了。原来 TimeZone 对象确实有一个“现在”的概念:

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 方法显示了不正确的偏移量。

于 2012-10-12T23:40:43.477 回答
1

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

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

ActiveSupport::TimeWithZone在处理对象时,与夏令时相关的 now 概念更有意义。当您通过在 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
于 2012-10-12T14:09:18.577 回答