diff -r -u rbyaml/lib/rbyaml/constructor.rb rbyaml-new/lib/rbyaml/constructor.rb
--- rbyaml/lib/rbyaml/constructor.rb	2006-06-11 11:11:47.000000000 -0400
+++ rbyaml-new/lib/rbyaml/constructor.rb	2008-01-03 22:54:06.000000000 -0500
@@ -361,16 +361,21 @@
       unless (match = TIMESTAMP_REGEXP.match(node.value))
         return construct_private_type(node)
       end
-      values = match.captures.map {|val| val.to_i}
-      fraction = values[6]
-      if fraction != 0
-        fraction *= 10 while 10*fraction < 1000
-        values[6] = fraction
-      end
-      stamp = Time.gm(values[0],values[1],values[2],values[3],values[4],values[5],values[6])
       
-      diff = values[7] * 3600 + values[8] * 60
-      return stamp-diff
+      # old implementation ... Time.gm chokes on some platforms for dates < 1970
+      #
+      # values = match.captures.map {|val| val.to_i}
+      # fraction = values[6]
+      # if fraction != 0
+      #   fraction *= 10 while 10*fraction < 1000
+      #   values[6] = fraction
+      # end
+      # stamp = Time.gm(values[0],values[1],values[2],values[3],values[4],values[5],values[6])
+      # diff = values[7] * 3600 + values[8] * 60
+      # return stamp-diff
+
+      # new implementation ... just use DateTime.parse instead
+      return DateTime.parse(node.value)
     end
     
     def construct_yaml_omap(node)
