3

異なるタイムゾーン(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を実行しています。

4

2 に答える 2

0

ActiveSupportTimeZone.parse指定された文字列からタイム ゾーン情報を抽出しようとはしません。日付と時刻を抽出し、指定された (ローカル) タイム ゾーンの TimeWithZone に変換するだけです。

str.to_time「GMT-0700」行に注意しますが、タイムゾーンのない時間を生成します。

「GMT.....」部分を抽出し、それをUTCオフセットに変換することで、それをごまかすことができます。これはタイムゾーンに近いですが、正確ではありません。

于 2012-04-07T16:21:00.970 に答える