Railsアプリの開発過程で、現役エンジニアの方から指摘を受け勉強になったことをシェアします。
Ruby/Rails初学者向けの記事になります。
Time.currentとTime.nowの違い
◆Time.current
・currentメソッドはRailsアプリ独自のメソッド
・TimeWithZoneクラスを使用
・config/application.rb
に設定してあるタイムゾーンを元に現在日時を取得
◆Time.now
・nowメソッドはRubyに元からあるメソッド
・Timeクラスを使用
・環境変数(ENV['TZ'])、もしくはシステムのタイムゾーンを元に現在日時を取得
タイムゾーンの指定例
◆Time.current
config.time_zone = 'Tokyo'
◆Time.now
ENV['TZ'] = "Asia/Tokyo"
現役エンジニアの方から指摘されたこと
私は当初Time.now
を使用していたのですが、Time.current
の方が良いとご指摘を受けました。
調べたところ、ENV['TZ']
の値はデフォルトでnil
になっていたため、システムのタイムゾーンを参照しており、アメリカ時刻になっていました。
Time.now
を無意識に使うと、このように予想外の時刻を参照していたりします。
Time.current
はシステムのタイムゾーンなどに左右されないために、Railsアプリごとにタイムゾーンを指定できるように作られたメソッドです。
したがって、特別な理由が無い限りはapplication.rb
にタイムゾーンを設定した上でこちらを使う方が良いと思われます。
#参考
より詳しい情報が知りたい方は、下記のQiita記事が大変参考になります。
[RubyとRailsにおけるTime, Date, DateTime, TimeWithZoneの違い]
(https://qiita.com/jnchito/items/cae89ee43c30f5d6fa2c)