1

私は RoR に比較的慣れておらず、タイムゾーンの変換に問題があります。データベース (米国中部時間で保存されている) からデータを取得するとき、そこにある時刻が UTC であると信じて変換しようとするため、5 時間の誤差が生じます。これは私のapplication.rbファイルにあります:

config.time_zone = 'Central Time (US & Canada)'
config.active_record.default_timezone = 'Central Time (US & Canada)'

これらの構成ディレクティブのいずれかを削除すると、時間が正しく保存されません。私がそれらを持っている限り、時間はデータベースに正しく保存されますが、RoR はそれらを正しく読み取ることができません。これを修正するには、データベースから取得したすべての時刻を UTC に変換する必要があります。もっと良い方法があると信じなければなりません。

ENV['TZ'] も設定してみましたが、どうにもなりませんでした。

ENV['TZ'] = "US/Central"

どんな助けでも感謝されます。

ありがとう!

4

1 に答える 1

0

実際、私にとっては、AR は :utc/:local から別の値に設定することを拒否しました

config.active_record.default_timezone = 'Central Time (US & Canada)'

この行は、 :local にフォールバックするという警告で満たされたログで終了しました

うまくいったのは、システムのタイムゾーンを完全に切り替えることです

ENV['TZ'] = "US/Central"

ただし、正しい tz 名を使用するようにしてください。Unix タイム ゾーン名は、ActiveSupport::TimeZone で使用されるものではありません

これについては、ActiveSupport::TimeZone::MAPPINGを参照してください。

また、この後 Time.now == Time.current; に注意してください。指定されたタイムゾーンでも時間を提供します。

したがって、これは解決策というよりも一種のハックです。

于 2013-05-24T09:42:56.497 に答える