想定バージョン
Ruby 2.5系
Ruby on Rails 5.2系
説明
ActiveRecordが発行するタイムスタンプのtimezoneはRailsの場合、config/application.rbで定義します。
# config/application.rb
Rails.application.configure do
config.active_record.default_timezone = :local
# (ActiveRecord::Base.default_timezone = :localと同義)
中略
end
この:localは何を指しているのかというとrubyプロセスタイムゾーンを指していて
rubyプロセスタイムゾーンはOSに定義されている環境変数のTZ
を見ています。
つまりこの環境変数を設定しないとActiveRecordはdefaultのUTCでタイムスタンプを発行してしまうことになります。
例えば以下のように定義すると、 created_atやupdated_atが東京の時間になります。
TZ=Asia/Tokyo
config.time_zoneとの違い
Railsで設定するタイムゾーンといえば、以下の方もあると思います。
Rails.application.configure do
config.time_zone = 'Tokyo'
end
こちらはTime.zone
で取得するタイムゾーンを東京にできる設定となっています。
アプリケーション上でTime.zone.now
を叩くと東京の現在の時間が取得できるようになります。