diff options
author | gbuesing <gbuesing@gmail.com> | 2008-05-08 20:56:38 -0500 |
---|---|---|
committer | gbuesing <gbuesing@gmail.com> | 2008-05-08 20:56:38 -0500 |
commit | fb9bf16e96e2c24d4996327500d8109b5d535e2c (patch) | |
tree | 87d0b30af0901868c5604ee2a50b3a8de5807a14 | |
parent | 328fada610aa9128386bc4b372d3e0b68aede945 (diff) | |
download | rails-fb9bf16e96e2c24d4996327500d8109b5d535e2c.tar.gz rails-fb9bf16e96e2c24d4996327500d8109b5d535e2c.tar.bz2 rails-fb9bf16e96e2c24d4996327500d8109b5d535e2c.zip |
Time.zone.parse: compatibility with far future date with time zone offset in string. Eliminate creation of additional TimeWithZone instance to determine utc offset.
-rw-r--r-- | activesupport/lib/active_support/values/time_zone.rb | 7 | ||||
-rw-r--r-- | activesupport/test/time_zone_test.rb | 9 |
2 files changed, 13 insertions, 3 deletions
diff --git a/activesupport/lib/active_support/values/time_zone.rb b/activesupport/lib/active_support/values/time_zone.rb index 2342cd182c..d597d99880 100644 --- a/activesupport/lib/active_support/values/time_zone.rb +++ b/activesupport/lib/active_support/values/time_zone.rb @@ -214,10 +214,11 @@ class TimeZone # Time.zone.parse('22:30:00') # => Fri, 31 Dec 1999 22:30:00 HST -10:00 def parse(str, now=now) time = Time.parse(str, now) rescue DateTime.parse(str) - unless time.is_a?(DateTime) || Date._parse(str)[:offset].nil? - time += time.in_time_zone(self).utc_offset - time.utc_offset + if Date._parse(str)[:offset].nil? + ActiveSupport::TimeWithZone.new(nil, self, time) + else + time.in_time_zone(self) end - ActiveSupport::TimeWithZone.new(nil, self, time) end # Returns an ActiveSupport::TimeWithZone instance representing the current time diff --git a/activesupport/test/time_zone_test.rb b/activesupport/test/time_zone_test.rb index dd70186676..0bfb89b675 100644 --- a/activesupport/test/time_zone_test.rb +++ b/activesupport/test/time_zone_test.rb @@ -189,6 +189,15 @@ class TimeZoneTest < Test::Unit::TestCase assert_equal zone, twz.time_zone end end + + def test_parse_far_future_date_with_time_zone_offset_in_string + silence_warnings do # silence warnings raised by tzinfo gem + zone = TimeZone['Eastern Time (US & Canada)'] + twz = zone.parse('2050-12-31 19:00:00 -10:00') # i.e., 2050-01-01 05:00:00 UTC + assert_equal [0,0,0,1,1,2051], twz.to_a[0,6] + assert_equal zone, twz.time_zone + end + end uses_mocha 'TestParseWithIncompleteDate' do def test_parse_with_incomplete_date |