Ruby資料一覧

日付/時刻

2007/10/17更新

対応バージョン: 1.8

日時データの要素を取り出す

以下の各メソッドを使用する。

hour
min
sec

時、分、秒を整数で返す

year
month(mon)
day(mday)

年、月、日を整数で返す

wday

曜日を0〜6の整数で返す

0:日、1:月、2:火、3:水、4:木、5:金、6:土

yday

1月1日を1とした通算日(1〜366)を整数で返す

isdst(dst?)

夏時間があるならtrueを、なければfalseを返す

zone

タイムゾーンを表す文字列を返す(例:JST)

(*) C言語のtm構造体とは異なり、monthは1月に対して1を返し、yearは1998年に対して1998を返す。またydayは1から数える。

特定のフォーマットの日時データをTimeオブジェクトに変換する

以下のフォーマットをサポートする。

rfc2822
rfc822

RFC 2822で定義されているdate-timeフォーマット。この形式はRFC 822で定義されてRFC 1123で更新された形式と同じである。

このフォーマットはRSS2.0で使われる。

httpdate

RFC 2616で定義されているHTTP-dateのrfc1123-dateフォーマット。

このフォーマットはHTTPレスポンスヘッダで使われる。

xmlschema
iso8601

XML Schemaで定義されているdateTimeフォーマット。

このフォーマットはRSS1.0で使われる。

例)

date = Time.rfc2822("Wed, 22 Aug 2007 01:21:38 +0900")
date = Time.rfc822("Wed, 22 Aug 2007 01:21:38 +0900")

date = Time.httpdate("Wed, 22 Aug 2007 01:21:38 GMT")

date = Time.xmlschema("2007-02-09T23:41:19+09:00")
date = Time.iso8601("2007-02-09T23:41:19+09:00")

これらTimeオブジェクトの内容をテキストに変換するにはstrftimeを使用する。

例)

p date.strftime("%Y/%m/%d %H:%M")

日時データをテキストに変換する

strftimeメソッドを使用する。

フォーマット文字列は以下のものが指定できる。

日付/時刻複合

%c

日付と時刻

例)

now = Time.now
p now.strftime("%c")
=> "Tue Oct 16 20:30:07 2007"

日付

%x

年月日(例:08/22/07)

%Y

西暦4桁

%y

西暦の下2桁(00-99)

%m

月(01-12)

%B

月の名称(January, February ... )

%b

月の省略名(Jan, Feb ... )

%d

日(01-31)

%w

曜日を表す数。日曜日が0(0-6)

%A

曜日の名称(Sunday, Monday ... )

%a

曜日の省略名(Sun, Mon ... )

%U

週を表す数。最初の「日曜日」が第1週の始まり(00-53)

%W

週を表す数。最初の「月曜日」が第1週の始まり(00-53)

%j

年中の通算日(001-366)

時刻

%H

24時間制の時(00-23)

%I

12時間制の時(01-12)

%M

分(00-59)

%S

秒(00-60) (60はうるう秒)

%p

午前または午後(AM,PM)

%X

時刻(HH:MM:SS)

%Z

タイムゾーン(例:JST)

様々なフォーマットの日時データを加工する

ParseDate.parsedateを使用する。

第1パラメータに加工したい日時データ(テキスト)を指定すると、与えられた日時表現を解析して見いだした要素を配列(年,月,日,時,分,秒,タイムゾーン,曜日)で返す。

解析できなかった要素にはnilがセットされる。

また、第2パラメータがtrueの場合でかつ年が0〜99の範囲の場合、年の下2桁の表現であるとみなし以下のルールに従って年の上2桁を補完する。

年 >= 69

1900年代とみなす(年 + 1900)

年 < 69

2000年代とみなす(年 + 2000)

他にも様々なフォーマットの日時表現を受け付けるので以下に例を示す。

require 'parsedate'

date_list = [
  "Sat Aug 28 21:45:09 1999",
  "Saturday, 28-Aug-99 21:45:09 GMT",
  "99-08-28",
  "01-08-28",
  "Sat",
  "Saturday",
  "1999-08-28",
  "21:45:09",
  "09:45:09 PM",
  "1999-08-28T21:45:09+0900",
  "19990828 214509",
  "H11.08.28T21:45:09Z",
  "Sat Aug 28 21:45:09 1999",
  "Sat Aug 28 21:45:09 JST 1999",
  "Sat, 28 Aug 1999 21:45:09 -0400",
  "Saturday, 28-Aug-99 21:45:09 GMT",
  "08/28/1999",
  "1999/08/28",
]

date_list.each {|date|
  print "#{date} => "
  p ParseDate.parsedate(date, true)
}

実行結果

Sat Aug 28 21:45:09 1999 => [1999, 8, 28, 21, 45, 9, nil, 6]
Saturday, 28-Aug-99 21:45:09 GMT => [1999, 8, 28, 21, 45, 9, "GMT", 6]
99-08-28 => [1999, 8, 28, nil, nil, nil, nil, nil]
01-08-28 => [2001, 8, 28, nil, nil, nil, nil, nil]
Sat => [nil, nil, nil, nil, nil, nil, nil, 6]
Saturday => [nil, nil, nil, nil, nil, nil, nil, 6]
1999-08-28 => [1999, 8, 28, nil, nil, nil, nil, nil]
21:45:09 => [nil, nil, nil, 21, 45, 9, nil, nil]
09:45:09 PM => [nil, nil, nil, 21, 45, 9, nil, nil]
1999-08-28T21:45:09+0900 => [1999, 8, 28, 21, 45, 9, "+0900", nil]
19990828 214509 => [1999, 8, 28, 21, 45, 9, nil, nil]
H11.08.28T21:45:09Z => [1999, 8, 28, 21, 45, 9, "Z", nil]
Sat Aug 28 21:45:09 1999 => [1999, 8, 28, 21, 45, 9, nil, 6]
Sat Aug 28 21:45:09 JST 1999 => [1999, 8, 28, 21, 45, 9, "JST", 6]
Sat, 28 Aug 1999 21:45:09 -0400 => [1999, 8, 28, 21, 45, 9, "-0400", 6]
Saturday, 28-Aug-99 21:45:09 GMT => [1999, 8, 28, 21, 45, 9, "GMT", 6]
08/28/1999 => [1999, 8, 28, nil, nil, nil, nil, nil]
1999/08/28 => [1999, 8, 28, nil, nil, nil, nil, nil]