Rubyでは、主に3種類のクラスで日付や時刻を処理します。
- Timeクラス
- DateTimeクラス(日付、時刻)
- Dateクラス(日付)
ここでは、それぞれのクラスごとに、日付を文字列に変換する方法を説明します。日付・日時フォーマットは、ページ下部の付録を参照してください。
Timeクラスのstrftimeメソッド
Timeクラスのstrftimeメソッドで、文字列を指定のフォーマットで表示できます。
1 |
t.strftime(フォーマット) |
サンプル
Timeクラスのnowメソッドで現在時刻を取得し変数tに代入し、strftimeメソッドで指定フォーマットの文字列に変換しています。
1 2 3 |
t = Time.now t.strftime("%a %b %d %H:%M:%S %z %Y") #=> "Thu Apr 14 20:48:12 +0900 2016" |
DateTimeクラスのstrftimeメソッド
DateTimeクラスは、dateライブラリを呼び出してから使います。strftimeメソッドの使い方は、Timeクラスと同じです。
サンプル
1 2 3 |
require 'date' t = DateTime.now p t.strftime("%Y/%m/%d %H:%M:%S") #=> "2016/04/14 21:45:22" |
Dateクラスのstrftimeメソッド
次に、Dateクラスを使う方法を説明します。Dateクラスは時刻を持たない日付だけのクラスです。DateTimeと同じく、dateライブラリを読み込んでから使います。
サンプル
Dateクラスでも、strftimeメソッドが使え、フォーマットの指定方法も同じです。
1 2 3 |
require 'date' d = Date.today d.strftime("%Y/%m/%d %H:%M:%S") => "2016/04/14 00:00:00" |
ただし、Dateクラスは日付しか保持していないので、時刻を指定しても、上のようにその部分の値はすべてゼロになります。
TimeクラスとDateTimeクラスの違い
TimeクラスとDateTimeクラスは、以前であれば実行速度や2038年問題などの違いがあったそうですが、今ではどちらも改善され両者に大きな違いはありません。
requireの有無
Timeクラスはrequireなしで使えますが、DateTimeクラスはrequireが必要。
単位の違い
DateTimeクラスの場合、「+1」すると1日後になるが、Timeクラスの場合は1秒後となる。
1 2 3 4 5 6 7 8 9 |
require "date" dt = DateTime.now + 1 p dt.strftime("%Y/%m/%d %H:%M:%S") #=> "2016/05/24 15:08:46" t = Time.now + 1 p t.strftime("%Y/%m/%d %H:%M:%S") #=> "2016/05/23 15:08:47" |
その他、細かい違いはありますが、基本はrequireなしで扱えるTimeクラスを使えば良いでしょう。(*Ruby on Railsで日付を扱う場合はまた異なります)
付録:Rubyの日付・時間フォーマット
%A | 曜日の名称(Sunday, Monday ... ) |
%a | 曜日の省略名(Sun, Mon ... ) |
%B | 月の名称(January, February ... ) |
%b | 月の省略名(Jan, Feb ... ) |
%C | 世紀 (2009年であれば 20) |
%c | 日付と時刻 |
%D | 日付 (%m/%d/%y) |
%d | 日(01-31) |
%e | 日。一桁の場合、半角空白で埋める ( 1..31) |
%F | %Y-%m-%d と同等 (ISO 8601の日付フォーマット) |
%H | 24時間制の時(00-23) |
%h | %b と同等 |
%I | 12時間制の時(01-12) |
%j | 年中の通算日(001-366) |
%k | 24時間制の時。一桁の場合、半角空白で埋める ( 0..23) |
%L | ミリ秒 (000.999) |
%l | 12時間制の時。一桁の場合、半角空白で埋める ( 0..12) |
%M | 分(00-59) |
%m | 月を表す数字(01-12) |
%n | 改行 (\n) |
%N | 秒の小数点以下。桁の指定がない場合は9桁(ナノ秒) |
%P | 午前または午後(am,pm) |
%p | 午前または午後(AM,PM) |
%R | 24時間制の時刻。%H:%M と同等。 |
%r | 12時間制の時刻。%I:%M:%S %p と同等。 |
%S | 秒(00-60) (60はうるう秒) |
%s | 1970-01-01 00:00:00 UTC からの経過秒 |
%T | 24時間制の時刻。%H:%M:%S と同等。 |
%t | タブ文字 (\t) |
%U | 週を表す数。最初の日曜日が第1週の始まり(00-53) |
%u | 月曜日を1とした、曜日の数値表現 (1..7) |
%v | VMS形式の日付 (%e-%b-%Y) |
%V | ISO 8601形式の暦週 (01..53) |
%W | 週を表す数。最初の月曜日が第1週の始まり(00-53) |
%w | 曜日を表す数。日曜日が0(0-6) |
%X | 時刻 |
%x | 日付 |
%Y | 西暦を表す数 |
%y | 西暦の下2桁(00-99) |
%Z | タイムゾーン |
%z | タイムゾーン。UTCからのオフセット (例 +0900) |
%:z | タイムゾーン。コロンが入ったUTCからのオフセット (例 +09:00) |
%::z | タイムゾーン。コロンが入った秒まで含むUTCからのオフセット (例 +09:00:00) |
%% | %自身 |