Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > library time

library time

要約

組み込みの Time クラスを拡張します。 日時を表す文字列をパースして Time オブジェクトに変換したり、 逆に Time オブジェクトを RFC などで定められた文字列に 変換する機能を提供します。

追加・再定義されるメソッド

Time#httpdate -> String [added by time]

[RFC2616]で定義されているHTTP-dateのrfc1123-dateとして 表現される以下の形式の文字列を返します:

day-of-week, DD month-name CCYY hh:mm:ss GMT

注意: 結果はいつも UTC (GMT) です。

使用例

require 'time'

iso8601_time = '2008-08-31T12:34:56+09:00'
t = Time.iso8601(iso8601_time)
p t.httpdate     #=> "Sun, 31 Aug 2008 03:34:56 GMT"
Time#xmlschema(fractional_seconds = 0) -> String [added by time]
Time#iso8601(fractional_seconds = 0) -> String [added by time]

XML Schema で定義されている dateTime として 表現される以下の形式の文字列を返します:

CCYY-MM-DDThh:mm:ssTZD
CCYY-MM-DDThh:mm:ss.sssTZD

ただし TZD は Z または [+-]hh:mm です。

If self is a UTC time, Z is used as TZD. [+-]hh:mm is used otherwise.

fractional_seconds は小数点以下の秒を指定します。 fractional_seconds のデフォルト値は 0 です。

[PARAM] fractional_seconds:
小数点以下の秒の桁数を整数で指定します。 省略した場合は0 となります。

使用例

require 'time'

iso8601_time = '2008-08-31T12:34:56+09:00'
t = Time.iso8601(iso8601_time)
p t.xmlschema    #=> "2008-08-31T03:34:56Z"
p t.xmlschema(9) #=> "2008-08-31T03:34:56.000000000Z"
Time#rfc2822 -> String [added by time]
Time#rfc822 -> String [added by time]

[RFC2822] で定義されている date-time として表現される 以下の形式の文字列を返します:

day-of-week, DD month-name CCYY hh:mm:ss zone

ただし zone は [+-]hhmm です。

self が UTC time の場合、zone は +0000 になります。

使用例

require 'time'

iso8601_time = '2008-08-31T12:34:56+09:00'
t = Time.iso8601(iso8601_time)
p t.rfc2822      #=> "Sun, 31 Aug 2008 03:34:56 -0000"
Time.httpdate(date) -> Time [added by time]

[RFC2616]で定義されているHTTP-dateとしてdateをパースして Timeオブジェクトに変換します。

dateが[RFC2616]に準拠していない、または Timeクラスが指定された日時を表現できないときにArgumentErrorが 発生します。

[PARAM] date:
[RFC2616]で定義されているHTTP-dateとしてパースされる文字列を指定します。
[EXCEPTION] ArgumentError:
dateが[RFC2616]に準拠していない、または Timeクラスが指定された日時を表現できないときに発生します。
require 'time'
rfc2616_time = 'Sun, 31 Aug 2008 12:34:56 GMT'

t = Time.httpdate(rfc2616_time)
p t.kind_of?(Time) #=> true

non_rfc2616_time = 'San, 31 Aug 2008 12:34:56 GMT'
begin
  Time.httpdate(non_rfc2616_time)
rescue ArgumentError => err
  puts err #=>  not RFC 2616 compliant date: "San, 31 Aug 2008 12:34:56 GMT"
end
Time.xmlschema(date) -> Time [added by time]
Time.iso8601(date) -> Time [added by time]

XML Schema で定義されている dateTime として date をパースして Time オブジェクトに変換します。

date がISO 8601で定義されている形式に準拠していない、 または Time クラスが指定された日時を表現できないときに ArgumentError が発生します。

[PARAM] date:
XML Schema で定義されている dateTime として パースされる文字列を指定します。
[EXCEPTION] ArgumentError:
date がISO 8601で定義されている形式に準拠していない、 または Time クラスが指定された日時を表現できないとき に発生します。

使用例

require 'time'

iso8601_time = '2008-08-31T12:34:56+09:00'
t = Time.iso8601(iso8601_time)
p t #=> Sun Aug 31 03:34:56 UTC 2008
p t.kind_of?(Time) #=> true

begin
  non_iso8601_time = '2008-08-31A12:34:56+09:00'
  Time.iso8601(non_iso8601_time)
rescue ArgumentError => err
  puts err #=> invalid date: "2008-08-31A12:34:56+09:00"
end
Time.parse(date, now = Time.now) -> Time [added by time]
Time.parse(date, now = Time.now) {|year| year } -> Time [added by time]

date を Date.#_parse によって パースして Timeオブジェクトに変換します。

ブロック付きで呼ばれた場合、dateの年はブロックによって変換されます。

Time.parse(...) {|y| y < 100 ? (y >= 69 ? y + 1900 : y + 2000) : y}

与えられた時刻に上位の要素がなかったり壊れていた場合、nowの 該当要素が使われます。 下位の要素がなかったり壊れていた場合、最小値(1か0)が使われます。

[PARAM] date:
Time オブジェクトに変換可能な文字列を指定します。
[PARAM] now:
現在時刻をTime オブジェクトで指定します。 デフォルトはTime.nowとなります。
# 現在時刻が "Thu Nov 29 14:33:20 GMT 2001" で
# タイムゾーンがGMTとすると:
Time.parse("16:30")     #=> Thu Nov 29 16:30:00 GMT 2001
Time.parse("7/23")      #=> Mon Jul 23 00:00:00 GMT 2001
Time.parse("2002/1")    #=> Tue Jan 01 00:00:00 GMT 2002

Date._parseがdateから情報を取り出せないとき、 または Time クラスが指定された日時を表現できないときに ArgumentError が発生します。

このメソッドは他のパース用メソッドのフェイルセーフとして 以下のように使用できます:

Time.rfc2822(date) rescue Time.parse(date)
Time.httpdate(date) rescue Time.parse(date)
Time.xmlschema(date) rescue Time.parse(date)

従って Time.parse の失敗はチェックすべきです。

Time.rfc2822(date) -> Time [added by time]
Time.rfc822(date) -> Time [added by time]

[RFC2822]で定義されているdate-timeとしてdateをパースして Timeオブジェクトに変換します。 この形式は[RFC822]で定義されて[RFC1123]で更新された形式と 同じです。

dateが[RFC2822]に準拠していない、または Timeクラスが指定された日時を表現できないときにArgumentErrorが 発生します。

[PARAM] date:
[RFC2822] で定義されるdate-time として文字列を指定します。
[EXCEPTION] ArgumentError:
dateが[RFC2822]に準拠していない、または Timeクラスが指定された日時を表現できないときに 発生します。

使用例

require 'time'

rfc2822_time = 'Sun, 31 Aug 2008 12:08:19 +0900'
t = Time.rfc2822(rfc2822_time)
p t.kind_of?(Time) #=> true
non_rfc2822_time = 'Sun 31 Aug 2008 12:08:19 +0900'

begin
  p Time.rfc2822(non_rfc2822_time)
rescue ArgumentError => err
  puts "format err: #{err}"
end

Classes

Sublibraries