From af56a2b6dc790170bc0876d09c0287832a14a5b7 Mon Sep 17 00:00:00 2001 From: akr Date: Sat, 3 May 2014 18:11:53 +0000 Subject: * lib/time.rb (Time.rfc2822): Fix year completion. Produce fixed-offset time object if appropriate. (Time.xmlschema): Produce fixed-offset time object if appropriate. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45800 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/time.rb | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) (limited to 'lib') diff --git a/lib/time.rb b/lib/time.rb index 507bf28daf..cb37c4e562 100644 --- a/lib/time.rb +++ b/lib/time.rb @@ -445,24 +445,26 @@ class Time day = $1.to_i mon = MonthValue[$2.upcase] year = $3.to_i + short_year_p = $3.length <= 3 hour = $4.to_i min = $5.to_i sec = $6 ? $6.to_i : 0 zone = $7 - # following year completion is compliant with RFC 2822. - year = if year < 50 - 2000 + year - elsif year < 1000 - 1900 + year - else - year - end + if short_year_p + # following year completion is compliant with RFC 2822. + year = if year < 50 + 2000 + year + else + 1900 + year + end + end + off = zone_offset(zone) year, mon, day, hour, min, sec = - apply_offset(year, mon, day, hour, min, sec, zone_offset(zone)) + apply_offset(year, mon, day, hour, min, sec, off) t = self.utc(year, mon, day, hour, min, sec) - t.localtime if !zone_utc?(zone) + t.localtime(off) if !zone_utc?(zone) t else raise ArgumentError.new("not RFC 2822 compliant date: #{date.inspect}") @@ -550,9 +552,12 @@ class Time end if $8 zone = $8 + off = zone_offset(zone) year, mon, day, hour, min, sec = - apply_offset(year, mon, day, hour, min, sec, zone_offset(zone)) - self.utc(year, mon, day, hour, min, sec, usec) + apply_offset(year, mon, day, hour, min, sec, off) + t = self.utc(year, mon, day, hour, min, sec, usec) + t.localtime(off) if !zone_utc?(zone) + t else self.local(year, mon, day, hour, min, sec, usec) end -- cgit v1.2.3