【Ruby入門】日付の扱い方まとめ (Date DateTime Time 比較)

【Ruby入門】日付の扱い方まとめ (Date DateTime Time 比較)

こんにちは! フリーエンジニアの長瀬です。

日付や時刻の操作はプログラミングをする上で必須の知識になってきます。

しかしRubyで日付や時刻を扱うとなると、以下のような疑問がでてきます。

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

そこでこの記事ではrubyの時間の扱い方について、以下の内容を解説してききます。

【基礎】日付を扱うためのクラス
【基礎】Dateクラス
【基礎】DateTimeクラス
【基礎】Timeクラス
【基礎】Date、DateTimeとTimeの差
【発展】日付の操作方法

Rubyで日付を扱う方法について網羅していますので、ぜひ参考にしてくださいね!

日付を扱うためのクラス

Rubyで日付を扱うクラスには、

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

があります。

この記事を読めばRubyで自在に日付を操ることができるようになります!

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

Dateクラス

まずはDateクラスについて解説してきます。

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

[実行結果]

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

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

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

[実行結果]

DateTimeクラス

次にDateTimeクラスです。

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

[実行結果]

DateTimeクラスにnowを指定することで現在の日時を取得することができます。

DateTimeもDateと同じく、dateをrequireする必要があります。

Timeクラス

次に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メソッドを使います。

では、Timeでフォーマットを指定してみましょう。

[実行結果]

このように

  • 年を取り出すには%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メソッドで相互変換できる。

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

Rubyカリキュラム無料公開中!

この記事はRuby入門完全攻略ガイド【基礎学習/アプリ開発/仕事獲得】の一部になります。このカリキュラムは、プログラミング入門者が、基礎学習からアプリ開発、さらには仕事獲得まで体系的に学べる内容となっています。

Ruby学習に必要な情報を一つにまとめていますので効率よくRubyを学ぶことが出来ます。この機会に是非活用していただければと思います。

【Ruby入門ガイド】アプリ開発で知っておくべき知識を総ざらい
更新日 : 2018年11月23日

Rubyを最短で習得したい方へ

近年では様々なWEBサービスが流通するようになりました。

WEBサービスの普及が進むにつれて、それらを素早く開発するのに長けたRubyの人気は今後さらに増し、Rubyエンジニアの需要も自ずと増えることは間違いなしでしょう。

元々ITリテラシーの高い方や他言語を習得している方であれば、独学でRubyを習得することが可能です。

ただし、プログラミング学習をしている方の多くは

「自分に合った教材が見つけられずに挫折してしまった」
「勉強のための勉強になってしまい、ゴールが見えない」
「情報が少なくどう調べればいいかわからない」
「エラーを解決するのに何日もかかってしまう」

このような悩みを抱えたまま挫折してしまうのが現実となっています。

  • もう挫折したくない
  • 本業と両立しながら、好きな時間で自分のペースで勉強を続けていきたい
  • 自分だけのカリキュラムで効率的に勉強したい
  • WEBアプリケーション開発までしっかりサポートして欲しい
そんな方はお気軽に侍エンジニア塾までご相談ください。

お一人お一人に専属のインストラクターがつくので、初心者の方がつまづきがちな、「CookPad」、「Wantedly」、「食べログ」のようなWEBアプリケーション開発方法もスムーズに学習することできます。

実際にオリジナルWEBアプリを開発し、成果物として認められて仕事獲得に成功した塾生は数多くいます。

このように、オリジナルアプリ開発から仕事獲得まで徹底的にサポートすることでプログラミング初心者の方でも安心して基礎学習に取り組むことができます。

まずは『無料体験レッスン』で、弊社のコンサルタントと一緒にあなた専用の学習方法やカリキュラムを考えてみませんか?

Rubyならではの学習方法や、現役フリーランスRubyエンジニアから貴重なアドバイスを受けることができます。

詳しくは下の画像から弊社サービス内容をご確認ください。

ruby_a1
LINEで送る
Pocket

書いた人

長瀬来

長瀬来

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

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

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

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

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

趣味は語学、読書です。

おすすめコンテンツ

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

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