ruby-changes:16550
From: tenderlove <ko1@a...>
Date: Mon, 5 Jul 2010 12:34:22 +0900 (JST)
Subject: [ruby-changes:16550] Ruby:r28541 (trunk): * ext/psych/lib/psych/scalar_scanner.rb (parse_string): support
tenderlove 2010-07-05 12:33:56 +0900 (Mon, 05 Jul 2010) New Revision: 28541 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=28541 Log: * ext/psych/lib/psych/scalar_scanner.rb (parse_string): support timezones that are not one hour off. [ruby-core:31023] * ext/psych/lib/psych/visitors/yaml_tree.rb: ditto Modified files: trunk/ChangeLog trunk/ext/psych/lib/psych/scalar_scanner.rb trunk/ext/psych/lib/psych/visitors/yaml_tree.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 28540) +++ ChangeLog (revision 28541) @@ -1,3 +1,10 @@ +Mon Jul 5 12:32:01 2010 Aaron Patterson <aaron@t...> + + * ext/psych/lib/psych/scalar_scanner.rb (parse_string): support + timezones that are not one hour off. [ruby-core:31023] + + * ext/psych/lib/psych/visitors/yaml_tree.rb: ditto + Sun Jul 4 22:49:54 2010 Tanaka Akira <akr@f...> * test/ruby/test_syntax.rb: split test_syntax from test_system.rb. Index: ext/psych/lib/psych/scalar_scanner.rb =================================================================== --- ext/psych/lib/psych/scalar_scanner.rb (revision 28540) +++ ext/psych/lib/psych/scalar_scanner.rb (revision 28541) @@ -88,9 +88,11 @@ time = Time.utc(yy, m, dd, hh, mm, ss, us) return time if 'Z' == md[3] + return Time.at(time.to_i, us) unless md[3] - tz = md[3] ? Integer(md[3].split(':').first.sub(/([-+])0/, '\1')) : 0 - Time.at((time - (tz * 3600)).to_i, us) + tz = md[3].split(':').map { |digit| Integer(digit.sub(/([-+])0/, '\1')) } + offset = tz.first * 3600 + ((tz[1] || 0) * 60) + Time.at((time - offset).to_i, us) end end end Index: ext/psych/lib/psych/visitors/yaml_tree.rb =================================================================== --- ext/psych/lib/psych/visitors/yaml_tree.rb (revision 28540) +++ ext/psych/lib/psych/visitors/yaml_tree.rb (revision 28541) @@ -136,26 +136,13 @@ end def visit_DateTime o - o = o.to_time - formatted = o.strftime("%Y-%m-%d %H:%M:%S") - if o.utc? - formatted += ".%06dZ" % [o.nsec] - else - formatted += ".%06d %+.2d:00" % [o.nsec, o.gmt_offset / 3600] - end - + formatted = format_time o.to_time tag = '!ruby/object:DateTime' @emitter.scalar formatted, nil, tag, false, false, Nodes::Scalar::ANY end def visit_Time o - formatted = o.strftime("%Y-%m-%d %H:%M:%S") - if o.utc? - formatted += ".%06dZ" % [o.nsec] - else - formatted += ".%06d %+.2d:00" % [o.nsec, o.gmt_offset / 3600] - end - + formatted = format_time o @emitter.scalar formatted, nil, nil, true, false, Nodes::Scalar::ANY end @@ -281,6 +268,17 @@ end private + def format_time time + formatted = time.strftime("%Y-%m-%d %H:%M:%S") + if time.utc? + formatted += ".%06dZ" % [time.nsec] + else + formatted += ".%06d %+.2d:%.2d" % [time.nsec, + time.gmt_offset / 3600, time.gmt_offset % 3600 / 60] + end + formatted + end + # FIXME: remove this method once "to_yaml_properties" is removed def find_ivars target loc = target.method(:to_yaml_properties).source_location.first -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/