railsのTimezone設定

タイムゾーンとは

共通の時間を使うエリアのこと、日本だと使われる時間はJST、世界の基準時刻のUTC(協定世界時)と比較して、+9時間の時差があるため、UTC+09:00やUTC+9などで表記される

設定方法

railsタイムゾーンはconfig/application.rbで設定できる  

DBの保存時間の変更をする

config.active_record.default_timezone = :local

デフォルトは:utcとなっている

表示のみをUSTからJSTにする

config.time_zone = 'Tokyo'

デフォルトはUTCとなっている
確認はコンソール上でTime.zoneやTime.currentなどで確認できる  

irb(main):001:0> Time.now

=> 2020-11-17 22:55:28 +0900

irb(main):002:0> Time.current

=> Tue, 17 Nov 2020 22:55:37 JST +09:00

irb(main):003:0> Time.zone

=> #<ActiveSupport::TimeZone:0x00007ff8e94bde00 @name="Tokyo", @utc_offset=nil, @tzinfo=#<TZInfo::DataTimezone: Asia/Tokyo>

時刻のI18n

rails-i18n gemがja.yml内に用意してくれているので参照
コードはこんな感じ

# config/locales/ja.yml
ja:
  time:
    am: 午前
    formats:
      default: "%Y年%m月%d日(%a) %H時%M分%S秒 %z"
      long: "%Y/%m/%d %H:%M"
      short: "%m/%d %H:%M"

このロケールファイルを使って時刻を例えば以下のように国際化できる

<%= l board.created_at, format: :long %>

参考文献

Rails 国際化 (i18n) API - Railsガイド

RailsのTimezone設定をUTCからJSTに変えたい時 - Qiita

rails-i18n/ja.yml at master · svenfuchs/rails-i18n · GitHub