0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Rubyにおける日時の扱い。DateとTimeの使い分け。

Last updated at Posted at 2020-09-29

はじめに

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クラスを使うと便利。

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?