今回はRubyの日付や時間を扱うオブジェクトについて学習方法を解説していきます。
Rubyには日付オブジェクト(Dateオブジェクト)、時間オブジェクト(Timeオブジェクト)、DateTimeオブジェクトがあります。
DateTimeオブジェクトも存在しますが、時間オブジェクト(Timeオブジェクト)でも日付を扱うことが出来るので、基本的には時間オブジェクトを使用していれば問題ないと思います。
現在時刻の取得
まずは一番わかりやすい現在時刻の取得を行ってみます。
取得すると以下のように記載されます。
[30] pry(main)> Time.now
=> 2020-12-27 18:22:24 +0700
取得したものをみると「+0700」と記載されていますが、こちらはタイムゾーンを表したものになります。私は現在ベトナムなので上記のように記載されています。
どこのタイムゾーンかは以下のように確認できます。
[32] pry(main)> Time.now.zone
=> "+07"
時間オブジェクトの作成【Timeオブジェクト】
以下のように変数に自分の欲しいTimeオブジェクトを生成して、代入することができます。
[33] pry(main)> datetime = Time.new(2020, 12, 25, 13, 30)
=> 2020-12-25 13:30:00 +0700
時間オブジェクトのフォーマット【Timeオブジェクト】
以下のようにstrftime関数を使うことで自分の好きなフォーマットで表示することもできます。
[34] pry(main)> datetime.strftime('%Y年 %m月 %d日:%H時 %M分')
=> "2020年 12月 25日:13時 30分"
[35] pry(main)> datetime.strftime('%Y年 %m月 %d日:タイムゾーン%Z %H時 %M分')
=> "2020年 12月 25日:タイムゾーン+07 13時 30分"
Time#strftime (Ruby 3.3 リファレンスマニュアル)
時刻を format 文字列に従って文字列に変換した結果を返します。
日付クラスを使うために【Dateオブジェクト】
日付オブジェクトは時間が不要な場合に使用します。
しかし、Rubyの環境ではいきなりDateクラスを使用することはできません。
まずはDateライブラリを読み込む必要があります。
[36] pry(main)> Date
NameError: uninitialized constant Date
Did you mean? Data
from (pry):48:in `__pry__'
[37] pry(main)> require 'date'
=> true
[38] pry(main)> Date
=> Date
現在日付の取得【Dateオブジェクト】
以下のようにtodayメソッドでシステムの現在日付を取得することができます。
Dateオブジェクトはタイムゾーンの情報を持っていません。単純にシステム日付を取ってきます。
[39] pry(main)> Date.today
=> #<Date: 2020-12-27 ((2459211j,0s,0n),+0s,2299161j)>
日付のフォーマット【Dateオブジェクト】
DateオブジェクトもTimeオブジェクトと同様にstrftimeメソッドでフォーマットできます。
[42] pry(main)> Date.new(2020, 12, 25).strftime('%Y年 %m月 %d日')
=> "2020年 12月 25日"
まとめ
Date,Timeオブジェクトはよく使用するので、きちんと覚えておきましょう。
コメント