日時の国際化
日時の国際化の手順
以下のように設定を記述する
[config/application.rb] config.time_zone = 'Asia/Tokyo' #タイムゾーンの設定 config.active_record.default_timezone = :local #データベースに登録、参照する時の設定(タイムゾーンと同じにする時は、:localにする。)
※
config.time_zone
で設定しているのは、Rails自体のアプリケーションの時刻の設定
config.active_record.default_timezone
で設定しているのは、DBで保存されている日時をどのエリアの時刻として読み取るか
基本的には、タイムゾーンとDBに登録する時の設定は統一したほうが良い。
↓
以下のようにアプリケーションのロケール設定をする
[config/application.rb] config.i18n.default_locale = :ja
↓
[config/locales/ja.yml]というファイルを作成し、表示形式を以下のように記述する。
[config/locales/ja.yml] ja: time: formats: default: '%Y/%m/%d %H:%M'
↓
lメソッドを使って、以下のように記述すると設定した表示形式で表示できる
[viewファイル] <%= l board.created_at %>
※ポイント
①下記のようにアプリケーションのタイムゾーンも、DBの時刻も日本の時刻として読み取るようにした場合
[config/application.rb] config.time_zone = 'Asia/Tokyo' config.active_record.default_timezone = :local #localというのは、OSのタイムゾーンのこと
[ビューファイル] = cooking_memory.created_at
②下記のようにアプリケーションのタイムゾーンを日本、DBの時刻を読み取るのをUTCにした場合
[config/application.rb] config.time_zone = 'Asia/Tokyo' config.active_record.default_timezone = :utc #localというのは、OSのタイムゾーンのこと
[ビューファイル] = cooking_memory.created_at
③下記のようにアプリケーションのタイムゾーンをUTC、DBの時刻を読み取るのを日本にした場合
[config/application.rb] config.time_zone = 'UTC' config.active_record.default_timezone = :local #localというのは、OSのタイムゾーンのこと
[ビューファイル] = cooking_memory.created_at
④下記のようにアプリケーションのタイムゾーンをUTC、DBの時刻を読み取るのをUTCにした場合
[config/application.rb] config.time_zone = 'UTC' config.active_record.default_timezone = :utc #localというのは、OSのタイムゾーンのこと
[ビューファイル] = cooking_memory.created_at
①、②のパターンは、アプリケーションのタイムゾーンを日本にしているので日本時間表示(+0900)になっている。
①、②のパターンは、時刻の表示が日本になっているが実際に時間が違うのは、DBの時刻をどのエリアで読み取るかを変えているため。
③、④のパターンは、アプリケーションのタイムゾーンをUTCにしているのでUTC時間表示(+0000)になっている。
③、④のパターンは、時刻の表示がUTCになっているが実際に時間が違うのは、DBの時刻をどのエリアで読み取るかを変えているため。
参考記事:
【初心者向け・動画付き】Railsで日時をフォーマットするときはstrftimeよりも、lメソッドを使おう - Qiita
ActiveRecordのdefault_timezoneについて - Qiita