+2007-04-25 Atsushi Enomoto <atsushi@ximian.com>
+
+ * XmlCustomFormatter.cs : fix GenerateToXmlString() as well.
+
2007-04-25 Atsushi Enomoto <atsushi@ximian.com>
* XmlCustomFormatter.cs :
case "boolean": return "(" + value + "?\"true\":\"false\")";
case "unsignedByte": return value + ".ToString(CultureInfo.InvariantCulture)";
case "char": return "((int)(" + value + ")).ToString(CultureInfo.InvariantCulture)";
+#if NET_2_0
+ case "dateTime": return value + ".ToString(\"yyyy-MM-ddTHH:mm:ss.FFFFFFF\", CultureInfo.InvariantCulture)";
+ case "date": return value + ".ToString(\"yyyy-MM-dd\", CultureInfo.InvariantCulture)";
+ case "time": return value + ".ToString(\"HH:mm:ss.FFFFFFF\", CultureInfo.InvariantCulture)";
+#else
case "dateTime": return value + ".ToString(\"yyyy-MM-ddTHH:mm:ss.fffffffzzz\", CultureInfo.InvariantCulture)";
case "date": return value + ".ToString(\"yyyy-MM-dd\", CultureInfo.InvariantCulture)";
case "time": return value + ".ToString(\"HH:mm:ss.fffffffzzz\", CultureInfo.InvariantCulture)";
+#endif
case "decimal": return "XmlConvert.ToString (" + value + ")";
case "double": return "XmlConvert.ToString (" + value + ")";
case "short": return value + ".ToString(CultureInfo.InvariantCulture)";
+2007-04-25 Atsushi Enomoto <atsushi@ximian.com>
+
+ * XmlConvert.cs : MinValue and MaxValue are unchanged by the
+ serialization mode (unlike DateTime.ToString()).
+
2007-04-25 Atsushi Enomoto <atsushi@ximian.com>
* XmlConvert.cs : in 2.0, use F instead of f in dateTime formatting.
#if NET_2_0
public static string ToString (DateTime value, XmlDateTimeSerializationMode mode)
{
+ // Unlike usual DateTime formatting, it preserves
+ // MaxValue/MinValue as is.
string modestr = null;
switch (mode) {
case XmlDateTimeSerializationMode.Local:
+ return (value == DateTime.MinValue ? DateTime.MinValue : value == DateTime.MaxValue ? value : value.ToLocalTime ()).ToString (
+ "yyyy-MM-ddTHH:mm:ss.FFFFFFFzzz",
+ CultureInfo.InvariantCulture);
+ break;
case XmlDateTimeSerializationMode.RoundtripKind:
+ return value.ToString (
+ "yyyy-MM-ddTHH:mm:ss.FFFFFFF",
+ CultureInfo.InvariantCulture);
+ break;
default:
return value.ToString (
"yyyy-MM-ddTHH:mm:ss.FFFFFFFzzz",
CultureInfo.InvariantCulture);
break;
case XmlDateTimeSerializationMode.Utc:
- return value.ToUniversalTime ().ToString (
+ return (value == DateTime.MinValue ? DateTime.MinValue : value == DateTime.MaxValue ? value : value.ToUniversalTime ()).ToString (
"yyyy-MM-ddTHH:mm:ss.FFFFFFFZ",
CultureInfo.InvariantCulture);
break;
+2007-04-25 Atsushi Enomoto <atsushi@ximian.com>
+
+ * XmlConvertTests.cs : added test for MaxValue serialization with
+ every XmlDateTimeSerializationMode.
+
2007-04-25 Atsushi Enomoto <atsushi@ximian.com>
* XmlReaderCommonTests.cs : added test for bug #81451.
AssertType.Fail (s + "should not fail");
}
}
+
+ [Test]
+ public void XmlDateTimeSerializationModeAndMaxValue ()
+ {
+ AssertEquals ("#1", "9999-12-31T23:59:59.9999999", XmlConvert.ToString (DateTime.MaxValue, XmlDateTimeSerializationMode.Unspecified).Substring (0, 27));
+ AssertEquals ("#2", "9999-12-31T23:59:59.9999999Z", XmlConvert.ToString (DateTime.MaxValue, XmlDateTimeSerializationMode.Utc));
+ AssertEquals ("#3", "9999-12-31T23:59:59.9999999", XmlConvert.ToString (DateTime.MaxValue, XmlDateTimeSerializationMode.RoundtripKind));
+ AssertEquals ("#4", "9999-12-31T23:59:59.9999999", XmlConvert.ToString (DateTime.MaxValue, XmlDateTimeSerializationMode.Local).Substring (0, 27));
+ // direct formatting string - no difference
+ AssertEquals ("#5", "9999-12-31T23:59:59.9999999Z", XmlConvert.ToString (DateTime.MaxValue, "yyyy-MM-ddTHH:mm:ss.FFFFFFFZ"));
+ AssertEquals ("#6", "9999-12-31T23:59:59.9999999", XmlConvert.ToString (DateTime.MaxValue, "yyyy-MM-ddTHH:mm:ss.FFFFFFFzzz").Substring (0, 27));
+ }
#endif
}
}