summaryrefslogtreecommitdiff
path: root/ext/psych/lib/psych/visitors/yaml_tree.rb
diff options
context:
space:
mode:
Diffstat (limited to 'ext/psych/lib/psych/visitors/yaml_tree.rb')
-rw-r--r--ext/psych/lib/psych/visitors/yaml_tree.rb13
1 files changed, 13 insertions, 0 deletions
diff --git a/ext/psych/lib/psych/visitors/yaml_tree.rb b/ext/psych/lib/psych/visitors/yaml_tree.rb
index 4282e0bb0a..412acdb750 100644
--- a/ext/psych/lib/psych/visitors/yaml_tree.rb
+++ b/ext/psych/lib/psych/visitors/yaml_tree.rb
@@ -135,6 +135,19 @@ module Psych
@emitter.scalar o.inspect, nil, '!ruby/regexp', false, false, Nodes::Scalar::ANY
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
+
+ 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?