web-dev-qa-db-ja.com

RailsのActive Recordのデフォルトのタイムゾーンを変更するにはどうすればよいですか?

application.rbで次のコメントに出会いました

# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
 config.time_zone = 'Eastern Time (US & Canada)'

上記からわかるように、私はconfig.time_zoneをEST時間に設定しました。ただし、DBでレコードが作成された場合でも、datetimeはUTC形式で保存されているように見えます。

上記のコメントでは、彼らは言う

...そしてActive Recordをこのゾーンに自動変換します...

どうすればそれができますか?

また、私はこれをherokuにも展開し、設定を引き継ぐようにします

125
Omnipresent

次をapplication.rbに追加する

 config.time_zone = 'Eastern Time (US & Canada)'
 config.active_record.default_timezone = :local # Or :utc
176
Omnipresent

他のすべてが不完全であるように見えるので、私はこの答えをまとめることにしました。

config.active_record.default_timezoneは、プルするときにTime.local(:localに設定されている場合)またはTime.utc(:utcに設定されている場合)を使用するかどうかを決定しますデータベースの日付と時刻。デフォルトは:utcです。 http://guides.rubyonrails.org/configuring.html


Railsタイムゾーンを変更したいが、Active Recordを継続したい場合UTCのデータベースに保存、使用

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

変更したい場合RailsタイムゾーンhaveActive Recordこのタイムゾーンでの時間の保存、使用

# application.rb
config.time_zone = 'Eastern Time (US & Canada)'
config.active_record.default_timezone = :local

警告:データベースに時間を非UTC形式で保存する前に、本当に2回考える必要があります。


application.rbを変更した後、Railsサーバーを再起動することを忘れないでください。


config.active_record.default_timezoneは2つの値しか受け取れないことに注意してください

  • :localconfig.time_zoneで定義されたタイムゾーンに変換)
  • :utc(UTCに変換)

利用可能なすべてのタイムゾーンを見つける方法は次のとおりです

rake time:zones:all

私は多くの苦悩の末、ディーン・ペリーと同じ結論に達しました。 config.time_zone = 'Adelaide'config.active_record.default_timezone = :localが勝ちの組み合わせでした。プロセス中の 私が見つけたもの です。

34
James Barona

私の場合(レール5)、app/config/environments/development.rbにこれらの2行を追加しました

config.time_zone = "Melbourne"
config.active_record.default_timezone = :local

それでおしまい!そして、メルボルンが正しく読まれたことを確認するために、ターミナルでコマンドを実行しました。

bundle exec rake time:zones:all

メルボルンは私がいるタイムゾーンにリストされていました!

20
Carole

タイムゾーンをグローバルにUTCに設定する場合は、Rails 4で以下を実行できます。

# Inside config/application.rb
config.time_zone = "UTC"
config.active_record.default_timezone = :utc

必ずアプリケーションを再起動してください。そうしないと、変更が表示されません。

10
sergserg

Rails 4.2.2で、application.rbに移動し、config.time_zone='city'を使用します(例: 'London'、 'Bucharest'、または 'Amsterdam'など)。

それはうまく動作するはずです。それは私のために働いた。

3
Andrei Laslo

このブロックをenvironment.rbファイルに追加する必要があり、すべてうまくいきました:)

Rails.application.configure do
    config.time_zone = "Pacific Time (US & Canada)"
    config.active_record.default_timezone = :local
end
  • 追加しましたbefore the Rails.application.initialize!
2
Taylor A. Leach

中国のユーザーの場合、以下の2行をconfig/application.rbに追加するだけです:

config.active_record.default_timezone = :local
config.time_zone = 'Beijing'