Rubyでのtimeクラスの取扱に関してのまとめ
19/01/27 17:37:10 19/05/05 18:09:28
どのプログラミング言語でも日時の取扱は基本事項の一つです。ループや条件分岐ほどではないにしても、プログラミング学習の基本編に含まれていることが大半でしょう。また実際のシステム開発でも必要なコードです。
しかし、日時に関するコードで地味に面倒だと感じるのがクラスが複数存在することです。どのプログラミング言語でも当てはまるかと思いますが、たとえばプロジェクトで開発していたら人によって使っているクラスが違った、なんてことがよくあります。
日付のみしか扱えないクラスと日時を扱えるクラスを使用している人がいたとすると、処理がぶつかるところでクラスを変換するか、もしくはどちらかが書き直す羽目になることもあるでしょう。
こういったことを防ぐために、あらかじめ日時を扱えるクラスにはどのようなものがあるのかを把握しておき、比較しておくと良いですね。このページではRubyで日時を取扱うのにもっとも便利なTimeクラスを中心に解説しますが、他のクラスについても紹介しておきます。
他の言語でも同じですが、ぜひ日時クラスを複数把握しておき、チームで開発する際はどのクラスを使うのかあらかじめ決めておくことをおすすめします。
目次
日時を扱えるクラス
Rubyで日時を扱えるクラスには以下の三つがあります。
- Dateクラス
- DateTimeクラス
- Timeクラス
このうちDateクラスは日付しか扱えないので、特に理由がないなら使用しなくて良いかと思います。そして、DateTimeクラスはTimeクラスに比べるとやや速度が遅い、requireで読み込まなければならない、といった特徴があります。
総合的に考えると、Timeクラス一択になるかと思います。他のプログラミング言語だと日時を扱うクラス選択に迷うことが多いですが、Rubyの場合優劣が割と明確なので選びやすいです。
Timeクラスの使い方
Timeクラスにどのようなメソッドがあるのか、何ができるのかを紹介していきます。
newメソッドで日時の取得
Timeクラスのもっとも基本的な使い方は、現在日時の取得です。サンプルコードは以下です。
time = Time.new
p time
上記のコードで現在日時を取得できます。
2019-01-22 21:20:15 +0900
次に、フォーマットを指定して出力します。
time = Time.new
p [time.year, time.month, time.day, time.hour, time.min, time.sec]
生成したオブジェクトに各メソッドを使用することで、必要な情報のみを取得することができます。
2019, 1, 22, 22, 50, 11
localメソッドで日時を指定して出力
日時を取得するのではなく、あらかじめ指定してフォーマットで出力することもできます。サンプルコードは以下です。
time = Time.local(2019,1,22,10)
p time
これを実行すると以下のようになります。
2019-01-22 10:00:00 +0900
parceメソッドで文字列を日付型に変換する
数字の羅列を日付型に変換することもできます。そのためにはtimeをrequireする必要があります。サンプルコードは以下です。
require "time"
time = "20190122224618"
p Time.parse(time)
上記のコードを実行すると、以下のようにコンソール出力されます。
2019-01-22 22:46:18 +0900
strtimeメソッドでフォーマットの指定
文章中に日時を入れるようなことも可能です。サンプルコードは以下です。
time = Time.now
p time
p time.strftime("[1]ただいまの時刻は%Y年%m月%d日%H時%M分%S秒です。")
p time.strftime("[2]ただいまの時刻は%X")
p time.strftime("[3]西暦%Y年、その下二桁は%yです。")
p time.strftime("[4]%p%l時、それはつまり%H時")
p time.strftime("[5]今日の曜日は%A、略して%a")
p time.strftime("[6]今月は%B、略して%b、つまり%m月です。")
p time.strftime("[7]今日は%m月%d日です。")
p time.strftime("[8]今日の日付と時刻は%xです。")
p time.strftime("[9]さらに詳しく言うと、%cです。")
p time.strftime("[10]今日は今年の1月1日から%j日目です。")
上記のコードを実行すると、以下のようにコンソール出力されます。
2019-01-22 22:50:08 +0900
“[1]ただいまの時刻は2019年01月22日22時50分08秒です。”
“[2]ただいまの時刻は22:50:08”
“[3]西暦2019年、その下二桁は19です。”
“[4]PM 10時、それはつまり22時”
“[5]今日の曜日はTuesday、略してTue”
“[6]今月はJanuary、略してJan、つまり01月です。”
“[7]今日は01月22日です。”
“[8]今日の日付と時刻は01/22/19です。”
“[9]さらに詳しく言うと、Tue Jan 22 22:50:08 2019です。”
“[10]今日は今年の1月1日から21日目です。”
このように、出力形式を自由に指定することが可能です。
上記に該当する方法ならそのままコピペでOKで、他の出力形式を希望する場合はネット検索すると出てくるかもしれません。
active_supportでメソッドを拡張する
Timeクラスを普通に使っても十分なのですが、active_supportをインストールすることでさらにTimeオブジェクトで使えるメソッドを拡張することが可能です。以下のコードでactive_supportをインストールできます。
gem install activesupport
active_supportをインストールすることで、いろいろなメソッドを使えますが、具体的には以下のようなものがあります。
- 時間の前後を計算する
- 日、週、月、年の単位ごとに時間を調整する
- 始め、終わりの日時を計算する
- 範囲を出力する
以上のようなことができます。必要になった際にぜひ調べてみてください。
active_supportは便利な機能が充実していますが、ここまでTimeオブジェクトをフル活用するシステムを作るかどうかは状況によります。
まとめ
業務用システムなどではTimeオブジェクトが特に重要ですが、個人開発するアプリなどだと基本項目だけで十分かもしれません。今Timeオブジェクトのすべての機能を網羅的に見てもなかなか覚えきれないので、基本項目だけは把握しておき、後は必要になったタイミングで見ていくのが良いかと思います。
ちなみに、今回紹介しなかったDateクラスやDateTimeクラスも使い方としてはTimeクラスとほぼ同じです。できることや機能性に違いはあるものの、プログラマーからすると実際大差ありません。
ただし、いろいろな機能を実装したくなった際にTimeオブジェクトが一番充実しており、途中でオブジェクトを変えて作り直すのは面倒です。なので、最初からTimeオブジェクトを選択した方が良いということでした。
Rubyのフリーランス案件をチェック
Ruby関連記事
1, Rubyフリーランスの仕事や単価、ruby on railsの在宅案件まで
2, Rubyとは?学習方法や将来性、perlやphp、Pythonの比較はどう?
3, Ruby on RailsでMySQLを使用する際の接続手順
4, あるiOSアプリのエンジニアがRuby on Railsのプロジェクトに加わった話
5, 小学生でも数時間でアプリを作れたRuby on railsの入門書3選
6, 【決定版!】Rubyでできることとは?
7, Ruby開発の新卒採用している会社まとめ
8, Rubyで文字列から数値へ変換する方法まとめ
9, RubyのWebサーバ「puma」を使ってみた感想
10, Rubyでのmecabの使い方を徹底解説します
11, Rubyでハッシュに対する繰り返し処理を行うeachの3つのメソッドの使い方
12, Rubyのyardを使ってソースからドキュメントを生成する方法
13, Rubyでディレクトリ内のファイルを一覧出来るようにする方法
14, Rubyを使ってcsvファイルを読み込む・書き込む方法まとめ
15, MacでRubyの開発環境構築する方法をまとめました
16, サーバーサイド開発言語としてのRubyってどうなの?
17, Rubyで範囲オブジェクトを配列にする方法
18, CentOSサーバにRubyをインストールする方法
19, Rubyを使ってやりたいことから逆引きで使える機能を解説します
20, Rubyでopen uriを使ってWeb上のデータを取得しよう
21, Rubyでハッシュをマージ(結合)する方法まとめ
22, Rubyのrakeの使い方をまとめました
23, (この記事)Rubyでのtimeクラスの取扱に関してのまとめ
人気記事