2012-04-07 24 views
3

異なるタイムゾーン(PDTとCDT)の異なる2つのステージングサーバーにデプロイされたレールアプリケーションをテストする際に、この問題が発生しました。両方のサーバーには、デフォルトのUTC config.time_zoneを使用するレールがあります。タイムゾーンの設定が異なるだけでなく、両方のサーバーの時計が正しく設定されています。以下はRails Time.zoneの解析が期待通りに機能しない

私はレールコンソールで見たものである。

システムのタイムゾーンは、CDT、

システムのタイムゾーンがPDTされているサーバー上
Time.zone.parse("Mon May 28 2012 00:00:00 GMT-0700 (PDT)") 
=> Mon, 28 May 2012 05:00:00 UTC +00:00 

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)は、クライアントから送信された任意の日時値です。これは、rails paramsコレクションを介して入ってくるjavascriptのDateオブジェクトを使用する場合の一般的なシナリオです。

なぜ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の上で、ルビー1.9.3-P125とレール3.2.3を実行していますよ。

+1

がの日付文字列を処理するためにactivesupportの::タイムゾーンにパッチを適用するマネージドレールと問題https://github.com/rails/rails/issues/5770 –

+0

を開設行う方法ですここでフォーマットしてください。コメントには、[here](https://github.com/rails/rails/issues/5770#issuecomment-5010661)のパッチがあります。 –

+0

元の問題は、このコミットを使用して、レールで修正されました。https://github.com/rails/rails/commit/005d910624bbfa724b638426a000c8074d4201a2 –

答えて

0

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

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

「GMT .....」部分を抽出し、これをタイムゾーンに厳密には近似しない​​UTCオフセットに変換することで、ファッジすることができます。ここで

+0

こんにちはMichael、私は同じ日付/時刻文字列が正しく解析される方法について詳細を追加しました。 。to_timeメソッドを文字列に追加します。それは一貫して正確に機能します。 –

0

は、私はそれが

> Time.zone = "Hawaii" 
=> "Hawaii" 
> Time.zone.parse("Tue Mar 13 2012 13:00:00 GMT+1300 (NZDT)".sub("GMT","")) 
=> Mon, 12 Mar 2012 14:00:00 HST -10:00 
> Time.zone = "UTC" 
=> "UTC" 
> Time.zone.parse("Tue Mar 13 2012 13:00:00 GMT+1300 (NZDT)".sub("GMT","")) 
=> Tue, 13 Mar 2012 00:00:00 UTC 00:00 
+0

Joseph、問題は現在レールで修正されています。 https://github.com/rails/rails/commit/005d910624bbfa724b638426a000c8074d4201a2 –

+0

@ShyamHabarakadaヒントをお読みください。彼らは最終的にそれがソートされて喜んで – JosephL

+0

あなたを歓迎します。 –

関連する問題