1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

[#5559] Do not black out the system timezone DST jump hour if Time.zone differs from that.

The system timezone DST jump hour should not be blacked out by Time.zone.parse if current Time.zone does not do the jump at that time.

Fixes #5559.
This commit is contained in:
Jarkko Laine 2012-03-23 11:10:14 +02:00
parent 014498e1d7
commit 03becb1309
2 changed files with 23 additions and 0 deletions

View file

@ -268,7 +268,12 @@ module ActiveSupport
date_parts = Date._parse(str)
return if date_parts.empty?
time = Time.parse(str, now) rescue DateTime.parse(str)
if date_parts[:offset].nil?
if date_parts[:hour] && time.hour != date_parts[:hour]
time = DateTime.parse(str)
end
ActiveSupport::TimeWithZone.new(nil, self, time)
else
time.in_time_zone(self)

View file

@ -203,6 +203,24 @@ class TimeZoneTest < ActiveSupport::TestCase
assert_equal Time.utc(1999,12,31,19), twz.time
end
def test_parse_should_not_black_out_system_timezone_dst_jump
zone = ActiveSupport::TimeZone['Pacific Time (US & Canada)']
zone.stubs(:now).returns(zone.now)
Time.stubs(:parse).with('2012-03-25 03:29', zone.now).
returns(Time.local(0,29,4,25,3,2012,nil,nil,true,"+03:00"))
twz = zone.parse('2012-03-25 03:29')
assert_equal [0, 29, 3, 25, 3, 2012], twz.to_a[0,6]
end
def test_parse_should_black_out_app_timezone_dst_jump
zone = ActiveSupport::TimeZone['Pacific Time (US & Canada)']
zone.stubs(:now).returns(zone.now)
Time.stubs(:parse).with('2012-03-11 02:29', zone.now).
returns(Time.local(0,29,2,11,3,2012,nil,nil,false,"+02:00"))
twz = zone.parse('2012-03-11 02:29')
assert_equal [0, 29, 3, 11, 3, 2012], twz.to_a[0,6]
end
def test_utc_offset_lazy_loaded_from_tzinfo_when_not_passed_in_to_initialize
tzinfo = TZInfo::Timezone.get('America/New_York')
zone = ActiveSupport::TimeZone.create(tzinfo.name, nil, tzinfo)