[Rails]DBのレコードのタイムゾーンがUTCなのになぜアプリ上ではJSTの時刻として扱われるか

Railsのタイムゾーンの設定

  • config.time_zone
    • アプリケーションのデフォルトのタイムゾーン。ActiveRecordで認識できるようにしている。
  • config.active_record.default_timezone
    • データベースから日付と時刻を取り出した際のタイムゾーンを Time.local にするか Time.utc のどちらにするかを指定する。デフォルト値はutc。

config.active_record.default_timezone の設定をもとに日付変換が行われている

config.active_record.default_timezone の設定がUTCならDBのレコードの日付はUTCとして扱われる。

DBに書き込むときも、TimeWithZoneの値をUTCに変換し、変換後の時刻を保存している。

さらに、 config.time_zone でJSTを設定しておけばActriveRecordインスタンスのタイムゾーンはJSTになり、日本時刻として扱われる。

【参考】