From 64231b49ca957b2a6810673e1f2abc3f63d11f29 Mon Sep 17 00:00:00 2001 From: sonots Date: Tue, 19 Apr 2016 04:20:48 +0000 Subject: [PATCH] * lib/time.rb: revert r54167 because it would break backward compatibilities, and it is documented that Time.parse does not take into account time zone abbreations other than ones described in RFC 822 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54647 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 7 +++++++ lib/time.rb | 20 +++++++------------- test/test_time.rb | 32 -------------------------------- 3 files changed, 14 insertions(+), 45 deletions(-) diff --git a/ChangeLog b/ChangeLog index 60900808d5..9cf73b7c49 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Tue Apr 19 13:18:12 2016 Naotoshi Seo + + * lib/time.rb: revert r54167 because it would break + backward compatibilities, and it is documented that + Time.parse does not take into account time zone + abbreations other than ones described in RFC 822 + Tue Apr 19 13:12:03 2016 Naotoshi Seo * ChangeLog: Fix dates of previous commits diff --git a/lib/time.rb b/lib/time.rb index 61e973a461..69e524fd61 100644 --- a/lib/time.rb +++ b/lib/time.rb @@ -249,18 +249,14 @@ class Time end private :apply_offset - def make_time(date, year, mon, day, hour, min, sec, sec_fraction, zone, offset, now) + def make_time(date, year, mon, day, hour, min, sec, sec_fraction, zone, now) if !year && !mon && !day && !hour && !min && !sec && !sec_fraction raise ArgumentError, "no time information in #{date.inspect}" end + off_year = year || now.year off = nil - if offset - off = offset - else - off_year = year || now.year - off = zone_offset(zone, off_year) if zone - end + off = zone_offset(zone, off_year) if zone if off now = now.getlocal(off) if now.utc_offset != off @@ -291,10 +287,8 @@ class Time sec ||= 0 usec ||= 0 - off = nil - if offset - off = offset - elsif year != off_year + if year != off_year + off = nil off = zone_offset(zone, year) if zone end @@ -369,7 +363,7 @@ class Time d = Date._parse(date, comp) year = d[:year] year = yield(year) if year && !comp - make_time(date, year, d[:mon], d[:mday], d[:hour], d[:min], d[:sec], d[:sec_fraction], d[:zone], d[:offset], now) + make_time(date, year, d[:mon], d[:mday], d[:hour], d[:min], d[:sec], d[:sec_fraction], d[:zone], now) end # @@ -447,7 +441,7 @@ class Time else year = d[:year] year = yield(year) if year && block_given? - t = make_time(date, year, d[:mon], d[:mday], d[:hour], d[:min], d[:sec], d[:sec_fraction], d[:zone], d[:offset], now) + t = make_time(date, year, d[:mon], d[:mday], d[:hour], d[:min], d[:sec], d[:sec_fraction], d[:zone], now) end t end diff --git a/test/test_time.rb b/test/test_time.rb index c7808e9cc1..0a6659f152 100644 --- a/test/test_time.rb +++ b/test/test_time.rb @@ -429,23 +429,6 @@ class TestTimeExtension < Test::Unit::TestCase # :nodoc: assert_equal(500000, Time.parse("2000-01-01T00:00:00.5+00:00").tv_usec) end - def test_parse_with_zone - t = Time.parse('2000-01-01T00:00:00 CET') - assert_equal(2000, t.year) - assert_equal(1, t.mon) - assert_equal(1, t.day) - assert_equal(0, t.hour) - assert_equal(0, t.min) - assert_equal(0, t.sec) - assert_equal(3600, t.utc_offset) - assert_equal(false, t.utc?) - - Time.instance_eval("ZoneOffset").each do |zone, offset| - t = Time.parse("2000-01-01T00:00:00 #{zone}") - assert_equal(offset*3600, t.utc_offset) - end - end - def test_strptime assert_equal(Time.utc(2005, 8, 28, 06, 54, 20), Time.strptime("28/Aug/2005:06:54:20 +0000", "%d/%b/%Y:%T %z")) assert_equal(Time.at(1).localtime, Time.strptime("1", "%s")) @@ -496,21 +479,6 @@ class TestTimeExtension < Test::Unit::TestCase # :nodoc: assert_equal(0, t.sec) assert_equal(0, t.utc_offset) assert_equal(true, t.utc?) - - t = Time.strptime('20010203 CET', '%Y%m%d %z') - assert_equal(2001, t.year) - assert_equal(2, t.mon) - assert_equal(3, t.day) - assert_equal(0, t.hour) - assert_equal(0, t.min) - assert_equal(0, t.sec) - assert_equal(3600, t.utc_offset) - assert_equal(false, t.utc?) - - Time.instance_eval("ZoneOffset").each do |zone, offset| - t = Time.strptime("2000-01-01 #{zone}", '%Y-%m-%d %z') - assert_equal(offset*3600, t.utc_offset) - end end def test_nsec