Rubyで日付を文字列に変換する方法:strftime

Rubyでは、主に3種類のクラスで日付や時刻を処理します。

  • Timeクラス
  • DateTimeクラス(日付、時刻)
  • Dateクラス(日付)

ここでは、それぞれのクラスごとに、日付を文字列に変換する方法を説明します。日付・日時フォーマットは、ページ下部の付録を参照してください。

Timeクラスのstrftimeメソッド

Timeクラスのstrftimeメソッドで、文字列を指定のフォーマットで表示できます。

t.strftime(フォーマット)

サンプル

Timeクラスのnowメソッドで現在時刻を取得し変数tに代入し、strftimeメソッドで指定フォーマットの文字列に変換しています。

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クラスと同じです。

サンプル

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メソッドが使え、フォーマットの指定方法も同じです。

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秒後となる。

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)
%% %自身

イベント