Преглед изворни кода

Fix ToDateTime() with serialization mode to not mess hour based on timezone.

Fixed bug #661787.
Atsushi Eno пре 15 година
родитељ
комит
8fd76fb60d

+ 2 - 2
mcs/class/System.XML/System.Xml/XmlConvert.cs

@@ -369,12 +369,12 @@ namespace System.Xml {
 			switch (mode) {
 			case XmlDateTimeSerializationMode.Local:
 				dt = ToDateTime (value, localDateTimeFormats);
-				return dt == DateTime.MinValue || dt == DateTime.MaxValue ? dt : dt.ToLocalTime ();
+				return new DateTime (dt.Ticks, DateTimeKind.Local);
 			case XmlDateTimeSerializationMode.RoundtripKind:
 				return ToDateTime (value, roundtripDateTimeFormats, _defaultStyle | DateTimeStyles.RoundtripKind);
 			case XmlDateTimeSerializationMode.Utc:
 				dt = ToDateTime (value, utcDateTimeFormats);
-				return dt == DateTime.MinValue || dt == DateTime.MaxValue ? dt : dt.ToUniversalTime ();
+				return new DateTime (dt.Ticks, DateTimeKind.Utc);
 			case XmlDateTimeSerializationMode.Unspecified:
 				return ToDateTime (value, unspecifiedDateTimeFormats);
 			default:

+ 8 - 0
mcs/class/System.XML/Test/System.Xml/XmlConvertTests.cs

@@ -763,6 +763,14 @@ namespace MonoTests.System.Xml
 			var s = "   2010-01-02T00:00:00Z \t";
 			XmlConvert.ToDateTime (s);
 		}
+		
+		[Test]
+		public void ToDateTimeUtc ()
+		{
+			// bug #661787
+			var date = XmlConvert.ToDateTime ("2010-12-29T22:01:15.1619814", XmlDateTimeSerializationMode.Utc);
+			Assert.AreEqual (22, date.Hour, "#1");
+		}
 #endif
 	}
 }