異なるタイムゾーン(PDTとCDT)で2つの異なるステージングサーバーにデプロイされたRailsアプリをテストしているときに、この問題が発生しました。両方のサーバーには、デフォルトのUTCconfig.time_zoneを使用するレールがあります。タイムゾーンの構成が異なることを除けば、両方のサーバーのクロックが正しく設定されています。
以下は、Railsコンソールに表示されるものです。
システムのタイムゾーンがCDTであるサーバーでは、
Time.zone.parse("Mon May 28 2012 00:00:00 GMT-0700 (PDT)")
=> Mon, 28 May 2012 05:00:00 UTC +00:00
システムのタイムゾーンがPDTであるサーバーでは、
Time.zone.parse("Mon May 28 2012 00:00:00 GMT-0700 (PDT)")
=> Mon, 28 May 2012 07:00:00 UTC +00:00
文字列Mon May 28 2012 00:00:00 GMT-0700 (PDT)
は、クライアントから送信される任意の日時値です。これは、railsparamsコレクションを介して着信するjavascriptDateオブジェクトを使用する場合の一般的なシナリオです。
2つの結果がTime.zone.parse(identical_date_time_string)
異なるのはなぜですか?
両方のシステムで以下を実行すると、結果は正しく表示されます。
"Mon May 28 2012 00:00:00 GMT-0700 (PDT)".to_time
=> 2012-05-28 07:00:00 UTC
私はubuntuでRuby1.9.3-p125を使用してRails3.2.3を実行しています。