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

...しかし現在、LAでは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

そのため、to_sメソッドが誤ったオフセットを表示しているにもかかわらず、TimeZoneを使用して適切なオフセットでTimeWithZoneオブジェクトを作成できます。

于 2012-10-12T23:40:43.477 に答える
1

ActiveSupport::TimeZoneオブジェクトに「今」という概念があるとは思いません。TimeZoneは、utc_offsetを使用して、必要な秒数で初期化できます::create

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
于 2012-10-12T14:09:18.577 に答える