【Ruby】日付や時刻を扱うDate,Timeオブジェクトの基本的な使い方と便利なメソッドを紹介 

Rubyで日付や時刻を扱うには、DateクラスやTimeクラスを使います。

DateクラスやTimeクラスには、日付や時刻を扱ったり、操作するのに便利なメソッドが多く用意されています。

また、DateTimeクラスも存在しますが、こちらはTimeクラスと重複する機能があるので、今回の記事では触れませんが、DateTimeクラスにはTimeクラスにない便利なメソッドもあるので、別の機会に紹介したいと思います。

目次

Dateクラス

DateクラスはRubyで日付を扱うためのクラスです。

それでは、Dateクラスの使い方から便利なメソッドを紹介していきましょう。

Dateクラスの使い方

Dateクラスは、実はRubyに標準で組み込まれておらず、ライブラリを読み込むことで使えるようになるクラスです。

Dateクラスを使えるようにするには、requiredateを読み込む必要があります。

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クラスを使いこなせるようにしておきましょう。

プログラミングスクールをお探しの方はこちら

フリーランス案件をお探しの方はこちら

エンジニア転職サイトをお探しの方はこちら

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次