【Ruby入門】日付・時刻の扱い方(Date、DateTime、Time)


Rubyで日付の扱い方がわからない
日付を扱うクラスが多すぎてどれを使えば良いかわからない
日付の計算方法がわからない

日付や時刻の操作はプログラミングをする上で必須の知識になってきます。しかしRubyで日付や時刻を扱うとなると、上記のような疑問がでてくるのではないでしょうか?

そこでこの記事ではrubyの日付や時刻の扱い方について、基本から応用的な使い方まで解説していきます。

Ruby日付を扱うためのクラス

Rubyで日付を扱うクラスは、以下の3つがあります。

  • Dateクラス
  • DateTimeクラス
  • Timeクラス

それでは、それぞれの使い方を見ていきましょう。

Dateクラス

Dateは日付を扱うことができるクラスで、時刻を扱うことはできません。

上のソースコードを見ていただくとわかる通り、Dateクラスを使用するためには、dateというライブラリをrequireで読み込む必要があります。

また、yearやmonthなどのメソッドを使用することで、それぞれの値を取り出すことができます。

Dateクラスで指定した日付を取得するには以下のように記述します。

DateTimeクラス

DateTimeクラスは、Date Timeという名前の通り、日付と時間を扱うことができるクラスです。

DateTimeクラスにnowを指定することで現在の日時を取得することができます。DateTimeもDateと同じく、dateをrequireする必要があります。

Timeクラス

TimeクラスはDateTimeと同じく、日時と時間を扱うことができます。

dateと同じで”.”以下に”year”や”min”などを指定することで、分や時間などの情報を切り出すことができます。

Date、DateTimeとTimeの差

ここまで三種類の、時間を扱うためのクラスを紹介していきましたが、

正直何が違うのかよくわからない…

と感じた方も多いと思います。

しかし、些細ですが以下のような差があります。

  • Timeの使用にrequireが必要ない
  • サマータイムが扱える
  • うるう秒を数えられる

これを見てみると、Timeの方が少し高機能になることがわかります。そのため、Rubyで日付、時間を扱う際は基本的にTimeを使用するようにしてください。

また、以降この記事の解説では日付の計算はTimeを用いて行います。

日付を自在に操る

日付を取得することができても、それを操ることができないと、実際に使用することはできません。そのため、この章では日付の計算や比較について解説していきたいと思います。

ただ、Timeはそのままだと非常に操作しにくいクラスです。

なのでactive_supportを言うgemを用いて操作していきます!

active_supportのインストール

まずはactive_supportがインストールされているか確認します。

以下のコマンドを入力してください。

[実行結果]に”activesupport”がない場合は次のコマンドでインストールしてください。

再度以下のコマンドを実行して”activesupport”があるか調べて下さい。

activesupportがあればOKです。

active_supportを用いた時間の加算、減算

それではactive_supportを用いて、日付の加算や減算を行いましょう。

ここで一つ注意点なのですが

ではactive_supportの中の適切なライブラリが読み込まれず、実行されません。

と書くようにしましょう。また、単純な加算や減算以外にも、昨日、明日、来週などを求めるメソッドも存在します。

比較

数字と同じように日付も、不等号で比較を行うこともできます。

未来の方が大きな値であるといえます。DateTimeでも日付の比較を行うことができます。

詳しくは、以下の記事を参照してください。

Rubyで日付・時刻を扱うならTimeクラスに決まり!
更新日 : 2019年4月24日

strftimeでformatを整える

rubyでフォーマット(format)を整えるにはstrftimeメソッドを使います。

  • 年を取り出すには%Y
  • 月を取り出すには%m
  • 日を取り出すには%d
  • 時を取り出すには%H
  • 分を取り出すには%M
  • 秒を取り出すには%S

小文字の%mは月で、大文字の%Mは分を表すので注意しましょう。また、それぞれの実行結果は以下のようになります。

  • %F = %Y-%m-%d
  • %T = %H:%M:%S

最低限この取り出し方が分かっていれば、フォーマットを指定して読みやすいように変換できます。

strptimeでformatされた時間を元に戻す

さきほどはstrftimeメソッドでフォーマットを指定しましたが、その逆でフォーマットが指定されているものからTimeに戻すにはstrptimeメソッドを使用します。

サンプルコードではstrftimeメソッドでフォーマットを指定したものを再びstrptimeメソッドでもとのTimeに戻しています。

このように、strptimeメソッドを使えば、strftimeメソッドでフォーマットを整えた時間をまたrubyのクラスで扱える時間に変換できます。

strptimeで日本語でformatされた時間を元に戻す

Timeクラスのstrptimeメソッドでは、日本語でフォーマットされた時間の文字列も、元のTimeクラスのオブジェクトに戻すことができます。なお、月や日の前にスペースが空いているフォーマット文字列を元に戻すには、%mや%dの前に半角スペースを置きます。

こうすることで、月や日の前にスペースが空いていても、空いていなくても、正しくeオブジェクトに戻せます。

以上のように、strptimeの第2に引数に年・月・日など日本語の文字を指定することにより、日本語でフォーマットされた時間の文字列から、Timeオブジェクトに変換することができます。

unix時間を扱う方法

Timeをunix時間に変換するにはto_iメソッドを使うだけです。また、unix時間から逆にTimeを得るにはatメソッドを使います。

このように、作成したunix時間から再びTimeに戻すことができました。

まとめ

今回はRubyで日付を扱う方法について解説していきました。

RubyではTimeクラスで日付を扱うことがほとんどで、active_supportというgemを入れることで、Timeクラスをより使いやすくなります。

Rubyを勉強する方はRailsを使うことも多いと思いますが、Railsではこのactive_supportというgemは標準ライブラリとしてインストールされているので、追加でインストールする必要はありません。

学習のポイントを振り返ってみましょう。

・Dateクラスは日付を扱える。時間は扱えない。
・DateTimeクラスは日付、時間を共に扱える。
・Timeクラスは日付、時間を共に扱える。Rubyで日付、時間を扱うときは、通常Timeクラスを扱う。
・Timeクラスを扱う時は、通常RailsのActiveSupportも使用する。
・Timeクラスで日付、時間の比較ができる。
・strftimeで、日付、時間をフォーマットされた文字列として文字列化できる。
・strptimeで、日付、時間のフォーマットされた文字列からTimeクラスのオブジェクトに戻すことができる。日本語のフォーマットでも可能。
・Timeクラスとunix時間を、to_iメソッドとatメソッドで相互変換できる。

この記事を参考に是非使ってみてください!

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

長瀬来

長瀬来

Unityを使ったiOSアプリのリリース、フリマサイト運営の経験があります。

経験した言語はC、C#、Javascript、R、Python、Ruby、PHPなど

言語が好きで、英語や中国、ドイツ語を勉強しました。
将来的には海外で生活したいです。

現在はRuby on Rails5やCocos2dxの勉強を主にしています。

ライターとしては
できるだけ初心者にわかりやすい文章になるように心がけています。

趣味は語学、読書です。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説