1
0

Time.atとTime.zone.atの違いについて

Posted at

Time.at

  • Rubyの組み込みメソッド。
  • 指定した時刻のTimeオブジェクトを返す。
  • キーワード引数inでタイムゾーンを指定できる。
  • タイムゾーンの指定がなく引数が数値の場合、生成されたTimeオブジェクトは地方時になる。
# Timeオブジェクト、もしくは起算時からの経過秒数を表す数値を指定する
Time.at(0) #=> 1970-01-01 00:00:00 +0000

# "+HH:MM" や "-HH:MM" のような形式の文字列か,"UTC"などでタイムゾーンを指定する
Time.at(1582721899, in: "UTC")  #=> 2020-02-26 12:58:19 UTC

Time.zone.at

  • Ruby on Railsのフレームワークにおいてタイムゾーンを取り扱うためのクラス。
  • TZInfoというRubyのタイムゾーン情報を扱うためのライブラリを利用していて、TZInfo::Timezone インスタンスをラップして、Railsでの使用に適したインターフェースを提供する。
  • 実際のタイムゾーンの数は非常に多いが、TimeZoneはそれを134の意味のあるゾーンに制限することで、一般的なタイムゾーンの選択を容易にする。
  • そしてより人間が読みやすい形式にタイムゾーンを表現してくれる。
  • タイムゾーン情報は、必要になったときだけロードされるので、メモリ使用量の削減や起動時間の短縮に寄与する。
  • Railsアプリケーションの config.time_zone 設定を通じて、デフォルトのタイムゾーンを設定できる。Time.zoneを通じてアクセスが容易になる。
Time.zone       # => #<ActiveSupport::TimeZone:0x514834...>
Time.zone.name  # => "Eastern Time (US & Canada)"
Time.zone.now   # => Wed, 04 Oct 2023 23:04:18.669175338 JST +09:00
Time.zone.at(0) # => Thu, 01 Jan 1970 09:00:00.000000000 JST +09:00
# タイムゾーンを東京に設定
config.time_zone = 'Tokyo'

両者の違い

  • Time.atはシステムのローカルタイムゾーンに基づくオブジェクトを生成する。
  • Time.zone.atはRailsのタイムゾーン設定に基づくオブジェクトを生成する。
    • タイムゾーンの一貫性を保つためには、Time.zone.atの使用が推奨される。

参考リンク

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0