日付だけでなく時刻も扱える Date のサブクラス DateTime も利用できます。
require 'date' a = Date.new(1993, 2, 24) b = Date.parse('1993-02-24') b += 10 b - a #=> 10 b.year #=> 1993 b.strftime('%a') #=> "Sat" yesterday = Date.today - 1
いくつか用語の定義は、[[ISO:8601]]、および [[JIS:X 0301]] に基づきます。
暦日付は、暦年、暦月、および暦月の中の序数によって指定される特定の日の日付です。
つまり、ごく当たり前の年月日による日付です。
年間通算日 (年日付) は、暦年、および暦年の中の序数によって指定される特定の日の日付です。
暦週日付は、暦週と暦年中の序数による日付です。
暦週は、暦年中の序数によって指定される特定の7日の期間であり、月曜から始まります。その年の第1暦週は、最初の木曜日を含む週とします。これは、 1月4日を含む週と同じです。
ユリウス日は紀元前4713年1月1日 (ユリウス暦) 正午 (グリニッジ平均時) を暦元とした通日 (経過日数) です。
この文書で、天文学的なユリウス日とは、本来のユリウス日と同じものです。また、年代学的なユリウス日とは、地方時における零時を一日の始まりとする流儀です。
この文書で、単に「ユリウス日」といった場合、それは本来のユリウス日でなく、「年代学的なユリウス日」を意味しています。
修正ユリウス日は西暦1858年11月17日 (グレゴリオ暦) 正子/零時 (協定世界時) を暦元とした通日 (経過日数) です。
この文書で、天文学的な修正ユリウス日とは、本来の修正ユリウス日と同じものです。また、年代学的な修正ユリウス日とは、地方時における零時を一日の始まりとする流儀です。
この文書で、単に「修正ユリウス日」といった場合、それは本来の修正ユリウス日でなく、「年代学的な修正ユリウス日」を意味しています。
_httpdate(str) -> Hash
[permalink][rdoc]このメソッドは Date.httpdate と似ていますが、日付オブジェクトを生成せずに、見いだした要素をハッシュで返します。
Date.httpdate も参照してください。
_iso8601(str) -> Hash
[permalink][rdoc]このメソッドは Date.iso8601 と似ていますが、日付オブジェクトを生成せずに、見いだした要素をハッシュで返します。
Date.iso8601 も参照してください。
_jisx0301(str) -> Hash
[permalink][rdoc]このメソッドは Date.jisx0301 と似ていますが、日付オブジェクトを生成せずに、見いだした要素をハッシュで返します。
Date.jisx0301 も参照してください。
_parse(str, complete = true) -> Hash
[permalink][rdoc]このメソッドは Date.parse と似ていますが、日付オブジェクトを生成せずに、見いだした要素をハッシュで返します。
Date.parse も参照してください。
_rfc2822(str) -> Hash
[permalink][rdoc]_rfc822(str) -> Hash
このメソッドは Date.rfc2822 と似ていますが、日付オブジェクトを生成せずに、見いだした要素をハッシュで返します。
Date.rfc2822 も参照してください。
_rfc3339(str) -> Hash
[permalink][rdoc]このメソッドは Date.rfc3339 と似ていますが、日付オブジェクトを生成せずに、見いだした要素をハッシュで返します。
Date.rfc3339 も参照してください。
_strptime(str, format = '%F') -> Hash
[permalink][rdoc]このメソッドは Date.strptime と似ていますが、日付オブジェクトを生成せずに、見いだした要素をハッシュで返します。
書式文字列に使用できるものは以下の通りです。
_xmlschema(str) -> Hash
[permalink][rdoc]このメソッドは Date.xmlschema と似ていますが、日付オブジェクトを生成せずに、見いだした要素をハッシュで返します。
Date.xmlschema も参照してください。
civil(year = -4712, mon = 1, mday = 1, start = Date::ITALY) -> Date
[permalink][rdoc]new(year = -4712, mon = 1, mday = 1, start = Date::ITALY) -> Date
暦日付に相当する日付オブジェクトを生成します。
このクラスでは、紀元前の年を天文学の流儀で勘定します。 1年の前は零年、零年の前は-1年、のようにします。月、および月の日は負、または正の数でなければなりません (負のときは最後からの序数)。零であってはなりません。
最後の引数は、グレゴリオ暦をつかい始めた日をあらわすユリウス日です。省略した場合は、Date::ITALY (1582年10月15日) になります。
Date.jd も参照してください。
例:
require 'date' Date.new(2017, 9, 20) # => #<Date: 2017-09-20 ...>
commercial(cwyear = -4712, cweek = 1, cwday = 1, start = Date::ITALY) -> Date
[permalink][rdoc]暦週日付に相当する日付オブジェクトを生成します。
週、および週の日 (曜日) は負、または正の数でなければなりません(負のときは最後からの序数)。零であってはなりません。
このメソッドに改暦前の日付を与えることはできません。
Date.jd、および Date.new も参照してください。
gregorian_leap?(year) -> bool
[permalink][rdoc]leap?(year) -> bool
グレゴリオ暦の閏年なら真を返します。
httpdate(str = 'Mon, 01 Jan -4712 00:00:00 GMT', start = Date::ITALY) -> Date
[permalink][rdoc][RFC2616] で定められた書式の日付を解析し、その情報に基づいて日付オブジェクトを生成します。
Date._httpdate も参照してください。
iso8601(str = '-4712-01-01', start = Date::ITALY) -> Date
[permalink][rdoc]いくつかの代表的な [[ISO:8601]] 書式の日付を解析し、その情報に基づいて日付オブジェクトを生成します。
Date._iso8601 も参照してください。
jd(jd = 0, start = Date::ITALY) -> Date
[permalink][rdoc]ユリウス日に相当する日付オブジェクトを生成します。
このクラスのいくつかの重要なメソッドで、負のユリウス日は保証されません。
Date.new も参照してください。
jisx0301(str = '-4712-01-01', start = Date::ITALY) -> Date
[permalink][rdoc]いくつかの代表的な [[JIS:X 0301]] 書式の日付を解析し、その情報に基づいて日付オブジェクトを生成します。
Date._jisx0301 も参照してください。
julian_leap?(year) -> bool
[permalink][rdoc]ユリウス暦の閏年なら真を返します。
西暦4年は真になりますが、これは歴史的には正しくありません。
ordinal(year = -4712, yday = 1, start = Date::ITALY) -> Date
[permalink][rdoc]年間通算日 (年日付) に相当する日付オブジェクトを生成します。
年の日は負、または正の数でなければなりません (負のときは最後からの序数)。零であってはなりません。
Date.jd、および Date.new も参照してください。
parse(str = '-4712-01-01', complete = true, start = Date::ITALY) -> Date
[permalink][rdoc]与えられた日付表現を解析し、その情報に基づいて日付オブジェクトを生成します。
年が "00" から "99" の範囲であれば、年の下2桁表現であるとみなしこれを補います。この振舞いを抑止したい場合は、ヒントとして、complete に false を与えます。
Date._parse も参照してください。
rfc2822(str = 'Mon, 1 Jan -4712 00:00:00 +0000', start = Date::ITALY) -> Date
[permalink][rdoc]rfc822(str = 'Mon, 1 Jan -4712 00:00:00 +0000', start = Date::ITALY) -> Date
[RFC2822] で定められた書式の日付を解析し、その情報に基づいて日付オブジェクトを生成します。
Date._rfc2822 も参照してください。
rfc3339(str = '-4712-01-01T00:00:00+00:00', start = Date::ITALY) -> Date
[permalink][rdoc][RFC3339] 書式の日付を解析し、その情報に基づいて日付オブジェクトを生成します。
Date._rfc3339 も参照してください。
strptime(str = '-4712-01-01', format = '%F', start = Date::ITALY) -> Date
[permalink][rdoc]与えられた雛型で日付表現を解析し、その情報に基づいて日付オブジェクトを生成します。
Date._strptime も参照してください。また strptime(3)、および Date#strftime も参照してください。
today(start = Date::ITALY) -> Date
[permalink][rdoc]現在の日付に相当する日付オブジェクトを生成します。
例:
require 'date' Date.today # => #<Date: 2017-09-20 ...>
valid_civil?(year, mon, mday, start = Date::GREGORIAN) -> bool
[permalink][rdoc]valid_date?(year, mon, mday, start = Date::GREGORIAN) -> bool
正しい暦日付であれば真、そうでないなら偽を返します。
Date.jd、および Date.civil も参照してください。
valid_commercial?(cwyear, cweek, cwday, start = Date::GREGORIAN) -> bool
[permalink][rdoc]正しい暦週日付であれば真、そうでないなら偽を返します。
Date.jd、および Date.commercial も参照してください。
valid_jd?(jd, start = Date::GREGORIAN) -> bool
[permalink][rdoc]真を返します。
対称性のため用意されていますが、実際的に意味はありません。
Date.jd も参照してください。
valid_ordinal?(year, yday, start = Date::GREGORIAN) -> bool
[permalink][rdoc]正しい年間通算日 (年日付) であれば真、そうでないなら偽を返します。
Date.jd、および Date.ordinal も参照してください。
xmlschema(str = '-4712-01-01', start = Date::ITALY) -> Date
[permalink][rdoc]XML Schema による書式の日付を解析し、その情報に基づいて日付オブジェクトを生成します。
Date._xmlschema も参照してください。
self + n -> Date
[permalink][rdoc]self から n 日後の日付オブジェクトを返します。 n は数値でなければなりません。
self - x -> Rational | Date
[permalink][rdoc]x が日付オブジェクトなら、ふたつの差を返します。あるいは x が数値ならば、self より x 日前の日付を返します。
self << n -> Date
[permalink][rdoc]self より n ヶ月前の日付オブジェクトを返します。 n は数値でなければなりません。
require 'date' Date.new(2001,2,3) << 1 #=> #<Date: 2001-01-03 ...> Date.new(2001,2,3) << -2 #=> #<Date: 2001-04-03 ...>
対応する月に同じ日が存在しない時は、代わりにその月の末日が使われます。
require 'date' Date.new(2001,3,28) << 1 #=> #<Date: 2001-02-28 ...> Date.new(2001,3,31) << 1 #=> #<Date: 2001-02-28 ...>
このことは以下のように、もしかすると予期しない振る舞いをするかもしれません。
require 'date' Date.new(2001,3,31) << 2 #=> #<Date: 2001-01-31 ...> Date.new(2001,3,31) << 1 << 1 #=> #<Date: 2001-01-28 ...> Date.new(2001,3,31) << 1 << -1 #=> #<Date: 2001-03-28 ...>
Date#prev_month も参照してください。
self <=> other -> -1 | 0 | 1 | nil
[permalink][rdoc]二つの日付を比較します。同じ日付なら 0 を、self が other よりあとの日付なら 1 を、その逆なら -1 を返します。
other は日付オブジェクトか、天文学的なユリウス日をあらわす数値を指定します。そうでない場合、比較ができないので nil を返します。
require "date"
p Date.new(2001, 2, 3) <=> Date.new(2001, 2, 4) # => -1
p Date.new(2001, 2, 3) <=> Date.new(2001, 2, 3) # => 0
p Date.new(2001, 2, 3) <=> Date.new(2001, 2, 2) # => 1
p Date.new(2001, 2, 3) <=> Object.new # => nil
p Date.new(2001, 2, 3) <=> Rational(4903887, 2) # => 0
self === other -> bool
[permalink][rdoc]同じ日なら真を返します。
self >> n -> Date
[permalink][rdoc]self から n ヶ月後の日付オブジェクトを返します。 n は数値でなければなりません。
require 'date' Date.new(2001,2,3) >> 1 #=> #<Date: 2001-03-03 ...> Date.new(2001,2,3) >> -2 #=> #<Date: 2000-12-03 ...>
対応する月に同じ日が存在しない時は、代わりにその月の末日が使われます。
require 'date' Date.new(2001,1,28) >> 1 #=> #<Date: 2001-02-28 ...> Date.new(2001,1,31) >> 1 #=> #<Date: 2001-02-28 ...>
このことは以下のように、もしかすると予期しない振る舞いをするかもしれません。
require 'date' Date.new(2001,1,31) >> 2 #=> #<Date: 2001-03-31 ...> Date.new(2001,1,31) >> 1 >> 1 #=> #<Date: 2001-03-28 ...> Date.new(2001,1,31) >> 1 >> -1 #=> #<Date: 2001-01-28 ...>
Date#next_month も参照してください。
ajd -> Rational
[permalink][rdoc]このメソッドは Date#jd と似ていますが、天文学的なユリウス日を返します。時刻を含みます。
amjd -> Rational
[permalink][rdoc]このメソッドは Date#mjd と似ていますが、天文学的な修正ユリウス日を返します。時刻を含みます。
asctime -> String
[permalink][rdoc]ctime -> String
asctime(3) 書式の文字列を返します (ただし、末尾の "\n\0" は除く)。
cwday -> Integer
[permalink][rdoc]暦週の日 (曜日) を返します (1-7、月曜は1)。
cweek -> Integer
[permalink][rdoc]暦週を返します (1-53)。
cwyear -> Integer
[permalink][rdoc]暦週における年を返します。
mday -> Integer
[permalink][rdoc]day -> Integer
月の日を返します (1-31)。
downto(min) {|date| ...} -> self
[permalink][rdoc]downto(min) -> Enumerator
このメソッドは、step(min, -1){|date| ...} と等価です。
england -> Date
[permalink][rdoc]このメソッドは、new_start(Date::ENGLAND) と等価です。
Date#new_start、および Date::ENGLAND を参照してください。
friday? -> bool
[permalink][rdoc]金曜日なら真を返します。
gregorian -> Date
[permalink][rdoc]このメソッドは、new_start(Date::GREGORIAN) と等価です。
Date#new_start、および Date::GREGORIAN を参照してください。
gregorian? -> bool
[permalink][rdoc]グレゴリオ暦なら真を返します。
httpdate -> String
[permalink][rdoc]iso8601 -> String
[permalink][rdoc]rfc3339 -> String
[[ISO:8601]] 書式の文字列を返します (拡大表記はつかいません)。
italy -> Date
[permalink][rdoc]このメソッドは、new_start(Date::ITALY) と等価です。
Date#new_start、および Date::ITALY を参照してください。
jd -> Integer
[permalink][rdoc]ユリウス日を返します。時刻を含みません。
Date#ajd も参照してください。
jisx0301 -> String
[permalink][rdoc][[JIS:X 0301]] 書式の文字列を返します。ただし、明治以前については [[ISO:8601]] 書式になります。なお、明治6年以前についても太陰太陽暦を使用することはありません。
julian -> Date
[permalink][rdoc]このメソッドは、new_start(Date::JULIAN) と等価です。
Date#new_start、および Date::JULIAN を参照してください。
julian? -> bool
[permalink][rdoc]ユリウス暦なら真を返します。
ld -> Integer
[permalink][rdoc]リリウス日を返します。
leap? -> bool
[permalink][rdoc]閏年なら真を返します。
mjd -> Integer
[permalink][rdoc]修正ユリウス日を返します。時刻の情報を含みません。
Date#amjd も参照してください。
mon -> Integer
[permalink][rdoc]month -> Integer
月を返します (1-12)。
monday? -> bool
[permalink][rdoc]月曜日なら真を返します。
new_start(start = Date::ITALY) -> Date
[permalink][rdoc]self を複製して、その改暦日を設定しなおします。引数を省略した場合は、Date::ITALY (1582年10月15日) になります。
Date.new も参照してください。
succ -> Date
[permalink][rdoc]next -> Date
翌日の日付オブジェクトを返します。
next_day(n = 1) -> Date
[permalink][rdoc]n 日後を返します。
Date#succ も参照してください。
next_month(n = 1) -> Date
[permalink][rdoc]n ヶ月後を返します。
Date#>> も参照してください。
next_year(n = 1) -> Date
[permalink][rdoc]n 年後を返します。
self >> (n * 12) に相当します。
require 'date' Date.new(2001,2,3).next_year #=> #<Date: 2002-02-03 ...> Date.new(2008,2,29).next_year #=> #<Date: 2009-02-28 ...> Date.new(2008,2,29).next_year(4) #=> #<Date: 2012-02-29 ...>
Date#>> も参照してください。
prev_day(n = 1) -> Date
[permalink][rdoc]n 日前を返します。
prev_month(n = 1) -> Date
[permalink][rdoc]n ヶ月前を返します。
Date#<< も参照してください。
prev_year(n = 1) -> Date
[permalink][rdoc]n 年前を返します。
self << (n * 12) に相当します。
require 'date' Date.new(2001,2,3).prev_year #=> #<Date: 2000-02-03 ...> Date.new(2008,2,29).prev_year #=> #<Date: 2007-02-28 ...> Date.new(2008,2,29).prev_year(4) #=> #<Date: 2004-02-29 ...>
Date#<< も参照してください。
rfc2822 -> String
[permalink][rdoc]rfc822 -> String
[RFC2822] で定められた書式の文字列を返します。
saturday? -> bool
[permalink][rdoc]土曜日なら真を返します。
start -> Integer
[permalink][rdoc]改暦日をあらわすユリウス日を返します。
Date.new も参照してください。
step(limit, step = 1) {|date| ...} -> self
[permalink][rdoc]step(limit, step = 1) -> Enumerator
ブロックの評価を繰り返します。ブロックは日付オブジェクトをとります。 limit は日付オブジェクトでなければなりません、また step は非零でなければなりません。
[SEE_ALSO] Date#downto, Date#upto
strftime(format = '%F') -> String
[permalink][rdoc]与えられた雛型で日付を書式づけます。
つぎの変換仕様をあつかいます:
%A, %a, %B, %b, %C, %c, %D, %d, %e, %F, %G, %g, %H, %h, %I, %j, %k, %L, %l, %M, %m, %N, %n, %P, %p, %Q, %R, %r, %S, %s, %T, %t, %U, %u, %V, %v, %W, %w, %X, %x, %Y, %y, %Z, %z, %:z, %::z, %:::z, %%, %+
GNU 版にあるような幅指定などもできます。
strftime(3)、および Date.strptime も参照してください。
sunday? -> bool
[permalink][rdoc]日曜日なら真を返します。
thursday? -> bool
[permalink][rdoc]木曜日なら真を返します。
to_date -> Date
[permalink][rdoc]対応する Date オブジェクトを返します。
to_datetime -> DateTime
[permalink][rdoc]対応する DateTime オブジェクトを返します。
to_s -> String
[permalink][rdoc][[ISO:8601]] 書式の文字列を返します (拡大表記はつかいません)。
to_time -> Time
[permalink][rdoc]対応する Time オブジェクトを返します。
tuesday? -> bool
[permalink][rdoc]火曜日なら真を返します。
upto(max) {|date| ...} -> self
[permalink][rdoc]upto(max) -> Enumerator
このメソッドは、step(max, 1){|date| ...} と等価です。
[SEE_ALSO] Date#step, Date#downto
wday -> Integer
[permalink][rdoc]曜日を返します (0-6、日曜日は零)。
wednesday? -> bool
[permalink][rdoc]水曜日なら真を返します。
xmlschema -> String
[permalink][rdoc]XML Scheme (date) による書式の文字列を返します。
yday -> Integer
[permalink][rdoc]年の日を返します (1-366)。
year -> Integer
[permalink][rdoc]年を返します。
ENGLAND -> Integer
[permalink][rdoc]英国がグレゴリオ暦をつかい始めた日 (1752年9月14日) をあらわすユリウス日です。この "ENGLAND" の名前は、旧い UNIX の cal(1) の記述に由来します。
[SEE_ALSO] https://www.bell-labs.com/usr/dmr/www/pdfs/man61.pdf
ちなみに、本実装で英国の改暦日を尊重する姿勢がみられるのは前実装からの影響です。前実装が英国の改暦日を尊重していたのは、おそらく cal(1) の影響です。もっとも本実装で一番に尊重されているのは、伊国の改暦日であり、多くの場合、改暦日の既定値は Date::ITALY です。
GREGORIAN -> Date::Infinity
[permalink][rdoc]常にグレゴリオ暦であることを示します。改暦日は無限の過去にあると考えられます。
ITALY -> Integer
[permalink][rdoc]伊国がグレゴリオ暦をつかい始めた日 (1582年10月15日) をあらわすユリウス日です。
JULIAN -> Date::Infinity
[permalink][rdoc]常にユリウス暦であることを示します。改暦日は無限の未来にあると考えられます。