diff options
Diffstat (limited to 'activesupport')
-rw-r--r-- | activesupport/lib/active_support/values/time_zone.rb | 8 | ||||
-rw-r--r-- | activesupport/test/time_zone_test.rb | 10 |
2 files changed, 7 insertions, 11 deletions
diff --git a/activesupport/lib/active_support/values/time_zone.rb b/activesupport/lib/active_support/values/time_zone.rb index 4c4c055252..72efb09fbe 100644 --- a/activesupport/lib/active_support/values/time_zone.rb +++ b/activesupport/lib/active_support/values/time_zone.rb @@ -291,16 +291,10 @@ module ActiveSupport parts = Date._parse(str, false) return if parts.empty? - default_mday = if parts[:year] || parts[:mon] - 1 - else - now.day - end - time = Time.new( parts.fetch(:year, now.year), parts.fetch(:mon, now.month), - parts.fetch(:mday, default_mday), + parts.fetch(:mday, parts[:year] || parts[:mon] ? 1 : now.day), parts.fetch(:hour, 0), parts.fetch(:min, 0), parts.fetch(:sec, 0) + parts.fetch(:sec_fraction, 0), diff --git a/activesupport/test/time_zone_test.rb b/activesupport/test/time_zone_test.rb index 37276b71e1..127bcc2b4d 100644 --- a/activesupport/test/time_zone_test.rb +++ b/activesupport/test/time_zone_test.rb @@ -255,10 +255,12 @@ class TimeZoneTest < ActiveSupport::TestCase end def test_parse_with_day_omitted - zone = ActiveSupport::TimeZone['Eastern Time (US & Canada)'] - zone.stubs(:now).returns zone.local(1999, 12, 31) - twz = zone.parse('Feb') - assert_equal Time.utc(1999, 2, 1), twz.time + with_env_tz 'US/Eastern' do + zone = ActiveSupport::TimeZone['Eastern Time (US & Canada)'] + assert_equal Time.local(2000, 2, 1), zone.parse('Feb', Time.local(2000, 1, 1)) + assert_equal Time.local(2005, 2, 1), zone.parse('Feb 2005', Time.local(2000, 1, 1)) + assert_equal Time.local(2005, 2, 2), zone.parse('2 Feb 2005', Time.local(2000, 1, 1)) + end end def test_parse_should_not_black_out_system_timezone_dst_jump |