目的
コーディングテストのオブジェクト指向問題において、クエリの処理などの時間を使用するものが多いためまとめる
DateクラスとTimeクラス
- Dateクラス
- 日付のみを扱いたい場合に使用
- Timeクラス
- 日付と時刻を扱いたい場合に使用
Timeクラス(timeライブラリを含む)のよく使うメソッド
parse メソッド
- 時間の文字列からTimeクラスオブジェクトに変換
- parseメソッドはRubyの組み込みのTimeクラスのメソッドではなく、timeライブラリによって拡張することによって使用可能となるため、先頭にrequireの記述が必要
require 'time' # 拡張
time_str = "2021/11/5 14:00:32"
time_obj = Time.parse(time_str)
=> 2021-11-05 14:00:32 +0900
Time オブジェクト同士減算
- 時間の差を出したい時がある
- Timeオブジェクトに変換して、減算してあげることで差が求まる
- 結果は秒数のFloat型で変換
time1 = "2021/11/5 14:00:32"
time2 = "2021/11/5 15:42:32"
time1_obj = Time.parse(time1)
time2_obj = Time.parse(time2)
time2_obj - time1_obj
=> 6120.0
# 秒数の絶対値が返るわけではない
time1_obj - time2_obj
=> -6120.0
秒で返るので分に直す
- 分単位で扱いたい場合
- Numeric クラスを拡張してあげてもいいかもしれない
class Float
def to_minutes
(self / 60).to_i
end
end
time1 = "2021/11/5 14:00:32"
time2 = "2021/11/5 15:42:32"
time1_obj = Time.parse(time1)
time2_obj = Time.parse(time2)
(time2_obj - time1_obj).to_minutes