Time.nowとTime.currentの違い
Time.now はRubyの標準的な現在時刻取得方法であり、Time.current はRailsのタイムゾーン設定に対応した現在時刻を返す方法。Railsアプリケーションでは、一貫したタイムゾーンの扱いのために Time.current の使用が推奨される。
Time.now
Time.now は、Rubyの標準ライブラリによって提供されるメソッド
システムのローカルタイムゾーンを使用して現在の時刻を返す
Railsのタイムゾーン設定には依存しない
つまり、Railsで設定されたタイムゾーンは考慮されず、実行されているシステムのタイムゾーンに基づいた時刻を返す
Time.current
Railsで設定されたタイムゾーン(通常は config/application.rb ファイル内で設定)を使用して現在の時刻を返す
タイムゾーンが設定されていない場合、Time.current は Time.now と同じ値を返す
Railsアプリケーション内で現在時刻を取得する際には Time.current を使用するべき
これにより、アプリケーション全体で一貫したタイムゾーンの扱いが保証される
/icons/hr.icon
Time.zone.nowとTime.currentの違い
Time.zone.now
- Time.zone.now は、RailsのActiveSupportによって提供される
- Railsで設定されたタイムゾーン(config.time_zone で設定)の現在時刻を返す。
- Time.zone が設定されていない場合(例えば、Railsの初期化プロセス中など)、このメソッドはエラーを発生させることがある
Time.current
- Railsで設定されたタイムゾーンの現在時刻を返しますが、もしタイムゾーンが設定されていない場合は、Time.now(システムのローカルタイムゾーン)を返す。
- そのためTime.current は Time.zone.now よりも少し柔軟性があり、タイムゾーンが未設定の場合でも安全に使用できる
結論
Time.zone.now と Time.current は、タイムゾーンが設定されている場合には同じ結果を返します。しかし、タイムゾーンが設定されていない場合、Time.zone.now は問題を引き起こす可能性がありますが、Time.current は安全にローカルタイムゾーンの時刻を返す。
Railsアプリケーションでは Time.current を使おう。これにより、タイムゾーン設定に依存しない一貫した方法で現在時刻を取得できる。