diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2019-07-16 09:30:58 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2019-07-16 09:41:23 +0900 |
commit | 75fb0a9afad1685cedee9c7665a7f30ec95068fc (patch) | |
tree | 1e5a9f3ca2389904ab99c301e6ac8e3f1ea27dab | |
parent | e2f987e65461bff85be2146dda93655b7d13a537 (diff) |
Allow mday in Date.iso8601 to be omitted
[Bug #12285]
-rw-r--r-- | ext/date/date_parse.c | 6 | ||||
-rw-r--r-- | test/date/test_date_parse.rb | 3 |
2 files changed, 6 insertions, 3 deletions
diff --git a/ext/date/date_parse.c b/ext/date/date_parse.c index e0634c39f1..ab46bda4ad 100644 --- a/ext/date/date_parse.c +++ b/ext/date/date_parse.c @@ -2262,8 +2262,8 @@ iso8601_ext_datetime_cb(VALUE m, VALUE hash) s[i] = rb_reg_nth_match(i, m); } - if (!NIL_P(s[3])) { - set_hash("mday", str2num(s[3])); + if (!NIL_P(s[1])) { + if (!NIL_P(s[3])) set_hash("mday", str2num(s[3])); if (strcmp(RSTRING_PTR(s[1]), "-") != 0) { y = str2num(s[1]); if (RSTRING_LEN(s[1]) < 4) @@ -2320,7 +2320,7 @@ static int iso8601_ext_datetime(VALUE str, VALUE hash) { static const char pat_source[] = - "\\A\\s*(?:([-+]?\\d{2,}|-)-(\\d{2})?-(\\d{2})|" + "\\A\\s*(?:([-+]?\\d{2,}|-)-(\\d{2})?(?:-(\\d{2}))?|" "([-+]?\\d{2,})?-(\\d{3})|" "(\\d{4}|\\d{2})?-w(\\d{2})-(\\d)|" "-w-(\\d))" diff --git a/test/date/test_date_parse.rb b/test/date/test_date_parse.rb index e17fd3eb25..dda952b8ce 100644 --- a/test/date/test_date_parse.rb +++ b/test/date/test_date_parse.rb @@ -712,6 +712,9 @@ class TestDateParse < Test::Unit::TestCase h = Date._iso8601('2001-02-03T04:05:06.07+01:00') assert_equal([2001, 2, 3, 4, 5, 6, 3600], h.values_at(:year, :mon, :mday, :hour, :min, :sec, :offset)) + h = Date._iso8601('2001-02') + assert_equal([2001, 2], + h.values_at(:year, :mon)) h = Date._iso8601('010203T040506Z') assert_equal([2001, 2, 3, 4, 5, 6, 0], |