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ガイド