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]