1

Rails 3.2 と Ruby 1.9.3 にアップグレードしたところ、非常に奇妙な動作が発生しました

Entryというモデルがあります。新しいエントリが作成されると、現在の日付と時刻で DB に挿入されます。

しかし、実行するEntry.find_by_id(THE_ENTRY_ID).created_atと、datetime に作成された「正しい」ものを取得しますが、別の TimeZone で作成されます。

2013-03-24 00:05:29

Rails コンソールとアプリケーションで次の操作を行います。

2013 年 3 月 23 日(土)20:05:29 EDT -04:00

突然間違ったタイムゾーンが返されるのはなぜですか?

4

2 に答える 2

3

DOCS を読み、この Rails キャストを見た後、OK : http://railscasts.com/episodes/106-time-zones-revised

すべてが明確になりました。

config.time_zone = 'Eastern Time (US & Canada)'

この設定は、すべての時間オブジェクトをこの現在のタイム ゾーンに変換する役割を担う実際の設定です。それは私がそれを-4と見た方法です

この設定:

config.active_record.default_timezone

DBで時間を節約する方法を決定するものですが... :localと:UTCの2つの値しか取得できず、デフォルトは:UTCです

Railsコンソールを使用してエントリを表示したとき、表示される時間は 'Eastern Time' に変換された後です.DBに保存されている実際の日付を確認するには:

created_at_before_type_cast

デフォルトのUTC時間を返しました

DBにタイムゾーン+2に格納されていると思った理由は、MySQL Workbenchを使用し、そのGUIがローカルマシン時間の日時値を表示したためです。

まとめ:

実際に重要な設定:

config.time_zone

それはうまく動作します。DOCS を確認することが重要です

于 2013-03-24T09:11:21.000 に答える
1

で設定を確認しますapplication.rb。タイムゾーンが設定されていない場合、Rails はオペレーティング システムのデフォルトのタイムゾーンを使用します。これを修正するには、UTC をタイムゾーンとして設定します。

于 2013-03-24T00:43:07.627 に答える