Railsのタイムゾーン
Railsアプリを試しに作っていて、今日はタイムゾーンで少しハマって調べたのでメモ。
構成はこの通り。
タイムゾーンいろいろ
まず、Railsアプリを作ってるときに関係するタイムゾーンが複数ある。
デフォルト
各タイムゾーンのデフォルト値。
Railsアプリ
下のコメントは、デフォルトで生成されるconfig配下のapplication.rbの抜粋。
config/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 = 'Central Time (US & Canada)'
デフォルトはUTCと書いてある。
DB
DBのタイムゾーンは、config.active_record.default_timezone
で設定できる。
Railsガイドによると、
config.active_record.default_timezoneは、データベースから日付・時刻を取り出した際のタイムゾーンをTime.local (:localを指定した場合)とTime.utc (:utcを指定した場合)のどちらにするかを指定します。デフォルトは:utcです。
Rails アプリケーションを設定する — Rails ガイド
よってデフォルトはUTC。
設定する
そうするには以下の一行を足すだけでできた。
config/application.rb
config.time_zone = 'Tokyo'
まとめ
まだまだ勉強として簡単なアプリを作っているだけで、国際化とかを考えるには早いけど、こういうことを意識しておくのも大事だと思う。
ちなみに、configを直したらサーバの再起動が必要。いつも忘れがちになる。今日も忘れていて、ちょっとした時間をロスした。
あとどうでもいいけど、なんでconfig.time_zone
は"time_zone"で config.active_record.default_timezone
は"timezone"なんだ。もしや_
でつなぐ単語は2つって決まってるのかと思ってガイドを見たらすぐにconfig.action_view.cache_template_loading
とかあった。なんなんだろう。