日時の国際化

日時の国際化の手順

以下のように設定を記述する

[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

Image from Gyazo

②下記のようにアプリケーションのタイムゾーンを日本、DBの時刻を読み取るのをUTCにした場合

[config/application.rb]

    config.time_zone = 'Asia/Tokyo'
    config.active_record.default_timezone = :utc

#localというのは、OSのタイムゾーンのこと
[ビューファイル]

= cooking_memory.created_at

Image from Gyazo

③下記のようにアプリケーションのタイムゾーンUTC、DBの時刻を読み取るのを日本にした場合

[config/application.rb]

    config.time_zone = 'UTC'
    config.active_record.default_timezone = :local

#localというのは、OSのタイムゾーンのこと
[ビューファイル]

= cooking_memory.created_at

Image from Gyazo

④下記のようにアプリケーションのタイムゾーンUTC、DBの時刻を読み取るのをUTCにした場合

[config/application.rb]

    config.time_zone = 'UTC'
    config.active_record.default_timezone = :utc

#localというのは、OSのタイムゾーンのこと
[ビューファイル]

= cooking_memory.created_at

Image from Gyazo

①、②のパターンは、アプリケーションのタイムゾーンを日本にしているので日本時間表示(+0900)になっている。
①、②のパターンは、時刻の表示が日本になっているが実際に時間が違うのは、DBの時刻をどのエリアで読み取るかを変えているため。
③、④のパターンは、アプリケーションのタイムゾーンUTCにしているのでUTC時間表示(+0000)になっている。
③、④のパターンは、時刻の表示がUTCになっているが実際に時間が違うのは、DBの時刻をどのエリアで読み取るかを変えているため。

参考記事:

【初心者向け・動画付き】Railsで日時をフォーマットするときはstrftimeよりも、lメソッドを使おう - Qiita

ActiveRecordのdefault_timezoneについて - Qiita

Railsでタイムゾーンを扱う方法を現役エンジニアが解説【初心者向け】 | TechAcademyマガジン

Railsのタイムゾーン設定について