[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になり、日本時刻として扱われる。
【参考】