[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