[Mono-dev] [PATCH] XmlConvert.ToString/ToDateTime with XmlDateTimeSerializationMode.Unspecified
Konstantin Triger
kostat at mainsoft.com
Mon Nov 26 06:19:03 EST 2007
Please review the patch for XmlConvert.ToString/ToDateTime with XmlDateTimeSerializationMode.Unspecified.
Index: Test/System.Xml/XmlConvertTests.cs
===================================================================
--- Test/System.Xml/XmlConvertTests.cs (revision 90275)
+++ Test/System.Xml/XmlConvertTests.cs (working copy)
@@ -619,6 +619,16 @@
AssertType.AreEqual ('Z', s [s.Length -1], "#2-1");
AssertType.AreEqual (DateTimeKind.Utc, XmlConvert.ToDateTime (s, XmlDateTimeSerializationMode.RoundtripKind).Kind, "#2-2");
}
+
+ [Test]
+ public void XmlDateTimeSerializationModeUnspecified ()
+ {
+ AssertEquals ("#1", 27, XmlConvert.ToString (new DateTime (DateTime.MaxValue.Ticks, DateTimeKind.Utc), XmlDateTimeSerializationMode.Unspecified).Length);
+ AssertEquals ("#2", 27+6, XmlConvert.ToString (new DateTime (DateTime.MaxValue.Ticks, DateTimeKind.Local), XmlDateTimeSerializationMode.Unspecified).Length);
+ DateTime dt1 = XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000+09:00", XmlDateTimeSerializationMode.Unspecified);
+ DateTime dt2 = XmlConvert.ToDateTime ("0001-02-03T10:20:30.0000", XmlDateTimeSerializationMode.Unspecified);
+ AssertEquals ("#3", false, dt1 == dt2);
+ }
[Test]
public void XmlDateTimeSerializationModeSeveralFormats ()
Index: System.Xml/XmlConvert.cs
===================================================================
--- System.Xml/XmlConvert.cs (revision 90275)
+++ System.Xml/XmlConvert.cs (working copy)
@@ -134,6 +134,7 @@
static readonly string [] roundtripDateTimeFormats;
static readonly string [] localDateTimeFormats;
static readonly string [] utcDateTimeFormats;
+ static readonly string [] unspecifiedDateTimeFormats;
static XmlConvert ()
{
@@ -141,11 +142,14 @@
roundtripDateTimeFormats = new string [l];
localDateTimeFormats = new string [l];
utcDateTimeFormats = new string [l];
+ unspecifiedDateTimeFormats = new string [l*2];
for (int i = 0; i < l; i++) {
string s = defaultDateTimeFormats [i];
localDateTimeFormats [i] = s + "zzz";
roundtripDateTimeFormats [i] = s + 'K';
utcDateTimeFormats [i] = s + 'Z';
+ unspecifiedDateTimeFormats [i*2] = s;
+ unspecifiedDateTimeFormats [i*2 + 1] = localDateTimeFormats [i];
}
}
#endif
@@ -337,6 +341,7 @@
dt = ToDateTime (value, utcDateTimeFormats);
return dt == DateTime.MinValue || dt == DateTime.MaxValue ? dt : dt.ToUniversalTime ();
case XmlDateTimeSerializationMode.Unspecified:
+ return ToDateTime (value, unspecifiedDateTimeFormats);
default:
return ToDateTime (value, defaultDateTimeFormats);
}
@@ -567,7 +572,7 @@
break;
case XmlDateTimeSerializationMode.Unspecified:
return value.ToString (
- "yyyy-MM-ddTHH:mm:ss.FFFFFFF",
+ value.Kind == DateTimeKind.Local ? "yyyy-MM-ddTHH:mm:ss.FFFFFFFzzz" : "yyyy-MM-ddTHH:mm:ss.FFFFFFF",
CultureInfo.InvariantCulture);
break;
}
Regards,
Konstantin Triger
More information about the Mono-devel-list
mailing list