summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authoryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-07-10 04:05:52 +0000
committeryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-07-10 04:05:52 +0000
commitc13b3808b971e3f59c957324dba039b46f3a9853 (patch)
tree33c79efc5165a3a1cfcb5523a4b129a0572eb7e4 /ext
parent12ce5781965faa81fafb7c20d47429111ba50f31 (diff)
merges r28550,r28551,r28554 and r28558 from trunk into ruby_1_9_2.
-- * ext/psych/lib/psych/scalar_scanner.rb: making the code more beautiful. Thanks nobu! -- * ext/psych/lib/psych/visitors/yaml_tree.rb (format_time): nanoseconds require more digits when dumping. Thanks akr! [ruby-core:31047] * test/psych/visitors/test_to_ruby.rb: adjusting tests for nanoseconds -- * test/psych/visitors/test_to_ruby.rb (test_time): time test must respect non-whole timezone. Thanks akr! [ruby-core:31061] -- * ext/psych/lib/psych/scalar_scanner.rb (parse_time): dealing with negative partial hour time zones. [ruby-core:31064] * ext/psych/lib/psych/visitors/yaml_tree.rb: ditto * test/psych/visitors/test_to_ruby.rb: ditto git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_2@28602 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext')
-rw-r--r--ext/psych/lib/psych/scalar_scanner.rb11
-rw-r--r--ext/psych/lib/psych/visitors/yaml_tree.rb8
2 files changed, 13 insertions, 6 deletions
diff --git a/ext/psych/lib/psych/scalar_scanner.rb b/ext/psych/lib/psych/scalar_scanner.rb
index e2aef65bda..e1e59d37e3 100644
--- a/ext/psych/lib/psych/scalar_scanner.rb
+++ b/ext/psych/lib/psych/scalar_scanner.rb
@@ -90,8 +90,15 @@ module Psych
return time if 'Z' == md[3]
return Time.at(time.to_i, us) unless md[3]
- tz = md[3].split(':').map { |digit| Integer(digit.sub(/([-+])0/, '\1')) }
- offset = tz.first * 3600 + ((tz[1] || 0) * 60)
+ tz = md[3].split(':').map { |digit| Integer(digit, 10) }
+ offset = tz.first * 3600
+
+ if offset < 0
+ offset -= ((tz[1] || 0) * 60)
+ else
+ offset += ((tz[1] || 0) * 60)
+ end
+
Time.at((time - offset).to_i, us)
end
end
diff --git a/ext/psych/lib/psych/visitors/yaml_tree.rb b/ext/psych/lib/psych/visitors/yaml_tree.rb
index 21a77e9982..3ecd9471e6 100644
--- a/ext/psych/lib/psych/visitors/yaml_tree.rb
+++ b/ext/psych/lib/psych/visitors/yaml_tree.rb
@@ -257,12 +257,12 @@ module Psych
private
def format_time time
- formatted = time.strftime("%Y-%m-%d %H:%M:%S")
+ formatted = time.strftime("%Y-%m-%d %H:%M:%S.%9N")
if time.utc?
- formatted += ".%06dZ" % [time.nsec]
+ formatted += "Z"
else
- formatted += ".%06d %+.2d:%.2d" % [time.nsec,
- time.gmt_offset / 3600, time.gmt_offset % 3600 / 60]
+ zone = time.strftime('%z')
+ formatted += " #{zone[0,3]}:#{zone[3,5]}"
end
formatted
end