ruby-changes:19308
From: tadf <ko1@a...>
Date: Tue, 26 Apr 2011 22:37:42 +0900 (JST)
Subject: [ruby-changes:19308] Ruby:r31348 (trunk): * ext/date/lib/date/format.rb (_iso8601): allowed day only civil
tadf 2011-04-26 22:36:49 +0900 (Tue, 26 Apr 2011) New Revision: 31348 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=31348 Log: * ext/date/lib/date/format.rb (_iso8601): allowed day only civil date. disallowed separatorless day only ordinal date. Modified files: trunk/ChangeLog trunk/ext/date/lib/date/format.rb trunk/test/date/test_date_parse.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 31347) +++ ChangeLog (revision 31348) @@ -1,3 +1,8 @@ +Tue Apr 26 22:34:04 2011 Tadayoshi Funaba <tadf@d...> + + * ext/date/lib/date/format.rb (_iso8601): allowed day only civil + date. disallowed separatorless day only ordinal date. + Mon Apr 25 21:31:36 2011 Nobuhiro Iwamatsu <iwamatsu@n...> * ext/openssl/extconf.rb: Should check SSLv2_*method. Index: ext/date/lib/date/format.rb =================================================================== --- ext/date/lib/date/format.rb (revision 31347) +++ ext/date/lib/date/format.rb (revision 31348) @@ -145,7 +145,7 @@ end def self._iso8601(str) # :nodoc: - if /\A\s*(?:([-+]?\d{2,}|-)-(\d{2})-(\d{2})| + if /\A\s*(?:([-+]?\d{2,}|-)-(\d{2})?-(\d{2})| ([-+]?\d{2,})?-(\d{3})| (\d{4}|\d{2})?-w(\d{2})-(\d)| -w-(\d)) @@ -154,7 +154,6 @@ (z|[-+]\d{2}(?::?\d{2})?)?)?\s*\z/ix =~ str if $3 e = { - :mon => $2.to_i, :mday => $3.to_i } if $1 != '-' @@ -164,6 +163,11 @@ end e[:year] = y end + if $2.nil? + return if $1 != '-' + else + e[:mon] = $2.to_i + end elsif $5 e = { :yday => $5.to_i @@ -205,17 +209,17 @@ e[:offset] = zone_to_diff($14) end e - elsif /\A\s*(?:([-+]?(?:\d{4}|\d{2})|--)(\d{2})(\d{2})| - ([-+]?(?:\d{4}|\d{2}))?(\d{3})| + elsif /\A\s*(?:([-+]?(?:\d{4}|\d{2})|--)(\d{2}|-)(\d{2})| + ([-+]?(?:\d{4}|\d{2}))(\d{3})| -(\d{3})| - (\d{4}|\d{2})?w(\d{2})(\d)| - -w-(\d)) + (\d{4}|\d{2})w(\d{2})(\d)| + -w(\d{2})(\d)| + -w-(\d)) (?:t? (\d{2})(\d{2})(?:(\d{2})(?:[,.](\d+))?)? (z|[-+]\d{2}(?:\d{2})?)?)?\s*\z/ix =~ str if $3 e = { - :mon => $2.to_i, :mday => $3.to_i } if $1 != '--' @@ -225,17 +229,20 @@ end e[:year] = y end + if $2 == '-' + return if $1 != '--' + else + e[:mon] = $2.to_i + end elsif $5 e = { :yday => $5.to_i } - if $4 - y = $4.to_i - if $4.size < 4 - y += if y >= 69 then 1900 else 2000 end - end - e[:year] = y + y = $4.to_i + if $4.size < 4 + y += if y >= 69 then 1900 else 2000 end end + e[:year] = y elsif $6 e = { :yday => $6.to_i @@ -245,29 +252,32 @@ :cweek => $8.to_i, :cwday => $9.to_i } - if $7 - y = $7.to_i - if $7.size < 4 - y += if y >= 69 then 1900 else 2000 end - end - e[:cwyear] = y + y = $7.to_i + if $7.size < 4 + y += if y >= 69 then 1900 else 2000 end end - elsif $10 + e[:cwyear] = y + elsif $11 e = { - :cwday => $10.to_i + :cweek => $10.to_i, + :cwday => $11.to_i } + elsif $12 + e = { + :cwday => $12.to_i + } end - if $11 - e[:hour] = $11.to_i - e[:min] = $12.to_i - e[:sec] = $13.to_i if $13 + if $13 + e[:hour] = $13.to_i + e[:min] = $14.to_i + e[:sec] = $15.to_i if $15 end - if $14 - e[:sec_fraction] = Rational($14.to_i, 10**$14.size) + if $16 + e[:sec_fraction] = Rational($16.to_i, 10**$16.size) end - if $15 - e[:zone] = $15 - e[:offset] = zone_to_diff($15) + if $17 + e[:zone] = $17 + e[:offset] = zone_to_diff($17) end e elsif /\A\s*(?:(\d{2}):(\d{2})(?::(\d{2})(?:[,.](\d+))?)? Index: test/date/test_date_parse.rb =================================================================== --- test/date/test_date_parse.rb (revision 31347) +++ test/date/test_date_parse.rb (revision 31348) @@ -667,15 +667,18 @@ end def test__iso8601 - h = Date._iso8601('01-02-03') - assert_equal([2001, 2, 3, nil, nil, nil, nil], + h = Date._iso8601('01-02-03T04:05:06Z') + assert_equal([2001, 2, 3, 4, 5, 6, 0], h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset)) - h = Date._iso8601('2001-02-03') - assert_equal([2001, 2, 3, nil, nil, nil, nil], + h = Date._iso8601('2001-02-03T04:05:06Z') + assert_equal([2001, 2, 3, 4, 5, 6, 0], h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset)) - h = Date._iso8601('--02-03') - assert_equal([nil, 2, 3, nil, nil, nil, nil], + h = Date._iso8601('--02-03T04:05:06Z') + assert_equal([nil, 2, 3, 4, 5, 6, 0], h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset)) + h = Date._iso8601('---03T04:05:06Z') + assert_equal([nil, nil, 3, 4, 5, 6, 0], + h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset)) h = Date._iso8601('2001-02-03T04:05') assert_equal([2001, 2, 3, 4, 5, nil, nil], @@ -693,15 +696,18 @@ assert_equal([2001, 2, 3, 4, 5, 6, 3600], h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset)) - h = Date._iso8601('010203') - assert_equal([2001, 2, 3, nil, nil, nil, nil], + h = Date._iso8601('010203T040506Z') + assert_equal([2001, 2, 3, 4, 5, 6, 0], h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset)) - h = Date._iso8601('20010203') - assert_equal([2001, 2, 3, nil, nil, nil, nil], + h = Date._iso8601('20010203T040506Z') + assert_equal([2001, 2, 3, 4, 5, 6, 0], h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset)) - h = Date._iso8601('--0203') - assert_equal([nil, 2, 3, nil, nil, nil, nil], + h = Date._iso8601('--0203T040506Z') + assert_equal([nil, 2, 3, 4, 5, 6, 0], h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset)) + h = Date._iso8601('---03T040506Z') + assert_equal([nil, nil, 3, 4, 5, 6, 0], + h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset)) h = Date._iso8601('010203T0405') assert_equal([2001, 2, 3, 4, 5, nil, nil], @@ -738,16 +744,52 @@ assert_equal([2001, 2, 3, 4, 5, 6, 3600], h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset)) - h = Date._iso8601('01-023') - assert_equal([2001, 23, nil, nil, nil, nil], + h = Date._iso8601('01-023T04:05:06Z') + assert_equal([2001, 23, 4, 5, 6, 0], h.values_at(:year, :yday, :hour, :min, :sec, :offset)) - h = Date._iso8601('2001-023') - assert_equal([2001, 23, nil, nil, nil, nil], + h = Date._iso8601('2001-023T04:05:06Z') + assert_equal([2001, 23, 4, 5, 6, 0], h.values_at(:year, :yday, :hour, :min, :sec, :offset)) - h = Date._iso8601('-023') - assert_equal([nil, 23, nil, nil, nil, nil], + h = Date._iso8601('-023T04:05:06Z') + assert_equal([nil, 23, 4, 5, 6, 0], h.values_at(:year, :yday, :hour, :min, :sec, :offset)) + h = Date._iso8601('01023T040506Z') + assert_equal([2001, 23, 4, 5, 6, 0], + h.values_at(:year, :yday, :hour, :min, :sec, :offset)) + h = Date._iso8601('2001023T040506Z') + assert_equal([2001, 23, 4, 5, 6, 0], + h.values_at(:year, :yday, :hour, :min, :sec, :offset)) + h = Date._iso8601('-023T040506Z') + assert_equal([nil, 23, 4, 5, 6, 0], + h.values_at(:year, :yday, :hour, :min, :sec, :offset)) + + h = Date._iso8601('01-w02-3T04:05:06Z') + assert_equal([2001, 2, 3, 4, 5, 6, 0], + h.values_at(:cwyear, :cweek, :cwday, :hour, :min, :sec, :offset)) + h = Date._iso8601('2001-w02-3T04:05:06Z') + assert_equal([2001, 2, 3, 4, 5, 6, 0], + h.values_at(:cwyear, :cweek, :cwday, :hour, :min, :sec, :offset)) + h = Date._iso8601('-w02-3T04:05:06Z') + assert_equal([nil, 2, 3, 4, 5, 6, 0], + h.values_at(:cwyear, :cweek, :cwday, :hour, :min, :sec, :offset)) + h = Date._iso8601('-w-3T04:05:06Z') + assert_equal([nil, nil, 3, 4, 5, 6, 0], + h.values_at(:cwyear, :cweek, :cwday, :hour, :min, :sec, :offset)) + + h = Date._iso8601('01w023T040506Z') + assert_equal([2001, 2, 3, 4, 5, 6, 0], + h.values_at(:cwyear, :cweek, :cwday, :hour, :min, :sec, :offset)) + h = Date._iso8601('2001w023T040506Z') + assert_equal([2001, 2, 3, 4, 5, 6, 0], + h.values_at(:cwyear, :cweek, :cwday, :hour, :min, :sec, :offset)) + h = Date._iso8601('-w023T040506Z') + assert_equal([nil, 2, 3, 4, 5, 6, 0], + h.values_at(:cwyear, :cweek, :cwday, :hour, :min, :sec, :offset)) + h = Date._iso8601('-w-3T040506Z') + assert_equal([nil, nil, 3, 4, 5, 6, 0], + h.values_at(:cwyear, :cweek, :cwday, :hour, :min, :sec, :offset)) + h = Date._iso8601('04:05') assert_equal([nil, nil, nil, 4, 5, nil, nil], h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset)) @@ -771,21 +813,6 @@ assert_equal([nil, nil, nil, 4, 5, 6, 3600], h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset)) - h = Date._iso8601('01-w02-3') - assert_equal([2001, 2, 3, nil, nil, nil, nil], - h.values_at(:cwyear, :cweek, :cwday, :hour, :min, :sec, :offset)) - h = Date._iso8601('2001-w02-3') - assert_equal([2001, 2, 3, nil, nil, nil, nil], - h.values_at(:cwyear, :cweek, :cwday, :hour, :min, :sec, :offset)) - h = Date._iso8601('2001w023') - assert_equal([2001, 2, 3, nil, nil, nil, nil], - h.values_at(:cwyear, :cweek, :cwday, :hour, :min, :sec, :offset)) - h = Date._iso8601('-w02-3') - assert_equal([nil, 2, 3, nil, nil, nil, nil], - h.values_at(:cwyear, :cweek, :cwday, :hour, :min, :sec, :offset)) - h = Date._iso8601('-w-3') - assert_equal([nil, nil, 3, nil, nil, nil, nil], - h.values_at(:cwyear, :cweek, :cwday, :hour, :min, :sec, :offset)) end def test__rfc3339 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/