はじめに
Rubyにおける日付や時刻の操作にはDateクラス、Timeクラスを使います。
Dateクラスは年月日だけを扱い、Timeクラスは年月日時分秒を扱います。
Timeクラスだけ使っておけばいいような気がしますが、Dateクラスにも得意分野があるので、その使い分けについて解説していきます。
目次
1.Dateは年月日、Timeは年月日時分秒
2.Dateクラスは日付処理が得意
3.結論
1.Dateは年月日、Timeは年月日時分秒
まず、時分秒まで表示したい、つまり、日時を扱いたい場合はTimeを使います。DateクラスのサブクラスであるDateTimeクラスも使えますが、require 'date'しないといけないことや、サマータイム、うるう秒を扱えないことなどを考慮すると、Timeクラスを使っておくのが無難だと思われます。
2.Dateクラスは日付処理が得意
日付や年単位での処理はDateクラスを使うと便利です。
[1]pry(main)> Date.today.next_month # 来月の同日
=> #<Date: 2020-10-29 ((2459152j,0s,0n),+0s,2299161j)>
[2] pry(main)> Date.new(2020,10,-1) # 月末日(2020年10月)
=> #<Date: 2020-10-31 ((2459154j,0s,0n),+0s,2299161j)>
[3] pry(main)> Date.today.leap? # うるう年の判定(今年=2020年)
=> true
[4] pry(main)> Date.today.next_year.leap? # うるう年の判定(来年=2021年)
=> false
[5] pry(main)> Date.today + 3 # 3日後
=> #<Date: 2020-10-02 ((2459125j,0s,0n),+0s,2299161j)>
[6] pry(main)> Date.today - 7 # 1週間前(7日前)
=> #<Date: 2020-09-22 ((2459115j,0s,0n),+0s,2299161j)>
[7] pry(main)> Date.today >> 6 # 半年後(6ヶ月後)
=> #<Date: 2021-03-29 ((2459303j,0s,0n),+0s,2299161j)>
[8] pry(main)> Date.today << 1 # 1ヶ月前
=> #<Date: 2020-08-29 ((2459091j,0s,0n),+0s,2299161j)>
来月の同日や月末日の取得、うるう年の判定などを簡単にできるのは便利です。
また、日付のインクリメント、デクリメント操作はTimeクラスでは、秒単位で扱わなければならないため少々面倒くさいです。その点、Dateクラスでは日単位は、+ と - ,月単位は << と >> で楽にできる。
3.結論
時刻まで表示したいときなど、基本的にはTimeクラスを使えばいいが、日、月、年単位での処理を主に行うときはDateクラスを使うと便利。