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 对象?似乎无法弄清楚
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 对象?似乎无法弄清楚
弄清楚了。原来 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 方法显示了不正确的偏移量。
我不相信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