Rubyで日付や時刻を扱うには、Date
クラスやTime
クラスを使います。
Date
クラスやTime
クラスには、日付や時刻を扱ったり、操作するのに便利なメソッドが多く用意されています。
また、DateTime
クラスも存在しますが、こちらはTime
クラスと重複する機能があるので、今回の記事では触れませんが、DateTime
クラスにはTime
クラスにない便利なメソッドもあるので、別の機会に紹介したいと思います。
Dateクラス
Date
クラスはRubyで日付を扱うためのクラスです。
それでは、Date
クラスの使い方から便利なメソッドを紹介していきましょう。
Dateクラスの使い方
Date
クラスは、実はRubyに標準で組み込まれておらず、ライブラリを読み込むことで使えるようになるクラスです。
Date
クラスを使えるようにするには、require
でdate
を読み込む必要があります。
require "date"
Date
クラスのtoday
メソッドを使うことで現在の日付を取得することができます。
require "date"
p Date.today
=> #<Date: 2022-06-12 ((2459743j,0s,0n),+0s,2299161j)>
また、日付を指定してDate
クラスのインスタンスを生成することもできます。
require "date"
p Date.today
=> #<Date: 2022-06-01 ((2459732j,0s,0n),+0s,2299161j)>
Dateクラスのメソッドを紹介
年月日をそれぞれ取得する
対象の日付の年を取得するにはyear
メソッド、月を取得するにはmonth
メソッド、日を取得するにはday
メソッドを使用します。
また、対象の日付の曜日を取得するにはwday
メソッドを使用します。日曜日の0
で始まり、土曜日の6
までの数字で取得できます。
require "date"
d = Date.today
p d.year # 2022
p d.month # 6
p d.day # 12
p d.wday # 0
何曜日かを判定する
sunday?
メソッドやmonday?
メソッドを使用することで該当の曜日かどうかを判定することができます。
require "date"
d = Date.today
p d.sunday? # true
p d.monday? # false
p d.tuesday? # false
p d.wednesday? # false
p d.thursday? # false
p d.friday? # false
p d.saturday? # false
日付の書式を指定して出力する
strftime
メソッドを使うことで、日付で指定した書式のファーマットで日付を出力することができます。
require "date"
d = Date.today
p d.strftime("%Y年%m月%d日") # "2022年06月12日"
日付を進めたり、戻したりする
翌日の日付を取得するにはnextメソッドを使用します。
また、何日後や何ヶ月後、何年後など日付を進めるにはnext_day
メソッド、next_month
メソッド、next_year
メソッドを使用し、引数に数値を渡すことでどのくらい進めるかを指定することができます。
何日前や何ヶ月前、何年前など日付を戻すにはprev_day
メソッド、prev_month
メソッド、prev_year
メソッドを使用し、引数に数値を渡すことでどのくらい戻すかを指定することができます。
require "date"
d = Date.today
p d.next # #<Date: 2022-06-13 ((2459744j,0s,0n),+0s,2299161j)>
p d.next_day(5) # #<Date: 2022-06-17 ((2459748j,0s,0n),+0s,2299161j)>
p d.next_month(8) # #<Date: 2023-02-12 ((2459988j,0s,0n),+0s,2299161j)>
p d.next_year(3) # #<Date: 2025-06-12 ((2460839j,0s,0n),+0s,2299161j)>
p d.prev_day(5) # #<Date: 2022-06-07 ((2459738j,0s,0n),+0s,2299161j)>
p d.prev_month(8) # #<Date: 2021-10-12 ((2459500j,0s,0n),+0s,2299161j)>
p d.prev_year(3) # #<Date: 2019-06-12 ((2458647j,0s,0n),+0s,2299161j)>
日付として正しいかを判定する
valid_date?
メソッドを使用することで日付として正しいかどうかを判定することができます。
第1引数に年、第2引数に月、第3引数に日を指定します。
require "date"
p Date.valid_date?(2022, 2, 29) # false
Timeクラス
Time
クラスはRubyで日時を扱うクラスです。
それではTime
クラスの使い方から便利なメソッドを紹介していきましょう。
Timeクラスの使い方
Time
クラスはDate
クラスとは違い、Rubyで標準で使用することができるので、ライブラリを読み込む必要はありません。
Time
クラスではnow
メソッドを使用するか、new
メソッドを引数指定せずに使用することで現在日時を取得することができます。
p Time.now
=> 2022-06-12 20:00:49 +0900
p Time.new
=> 2022-06-12 20:00:49 +0900
また、日時を指定してTime
クラスのインスタンスを生成することができます。
p Time.new(2022, 6, 1, 12, 15, 30)
=> 2022-06-01 12:15:30 +0900
Timeクラスのメソッドを紹介
年月日や時間などをそれぞれ取得する
日時から年を取得するにはyear
メソッド、月を取得するにはmonth
メソッド、日を取得するにはday
メソッド、時間を取得するにはhour
メソッド、分を取得するにはmin
メソッド、秒を取得するにはsec
メソッドを使用します。
t = Time.now
p t.year # 2022
p t.month # 6
p t.day # 12
p t.hour # 20
p t.min # 21
p t.sec # 32
日時を配列で取得する
to_a
メソッドを使用することで配列形式で日時の情報を取得することができます。
配列には順番に、秒、分、時間、日、月、年、曜日、年内通算日、夏時間であるかどうか、タイムゾーンの情報が格納されています。
t = Time.now
p t.to_a
=> [28, 28, 20, 12, 6, 2022, 0, 163, false, "JST"]
日時の書式を指定して出力する
strftime
メソッドを使うことで、引数で指定したフォーマットで日時を出力することができます。
t = Time.now
p t.strftime("%Y-%m-%d %H:%M:$S")
=> "2022-06-12 20:31:41"
タイムゾーンを取得する
zone
メソッドを使用することで、タイムゾーンを文字列で取得することができます。
t = Time.now
p t.zone
=> "JST"
まとめ
Rubyでの日付や時間の扱い方から、Date
クラスやTime
クラスの便利なメソッドの使い方まで紹介をしてきました。
Webアプリケーション開発を行う際に、日付や時間を機会は非常に多いです。
ぜひDate
クラスやTime
クラスを使いこなせるようにしておきましょう。