diff options
author | Atsushi Eno <atsushieno@gmail.com> | 2010-01-15 15:40:53 +0300 |
---|---|---|
committer | Atsushi Eno <atsushieno@gmail.com> | 2010-01-15 15:40:53 +0300 |
commit | 159dce275c8128b7e1a87b11fa1b2df78343506b (patch) | |
tree | 0ebfee43506ff0e9abb7b2eebc0b703d78929c87 /mcs/class/System.XML/System.Xml | |
parent | 8d4203be63174becfa4198210f89c1d1817c7e3c (diff) |
backport r149609, r149612, r149617 and r149618.
svn path=/branches/mono-2-6/mcs/; revision=149626
Diffstat (limited to 'mcs/class/System.XML/System.Xml')
-rw-r--r-- | mcs/class/System.XML/System.Xml/ChangeLog | 17 | ||||
-rw-r--r-- | mcs/class/System.XML/System.Xml/XmlConvert.cs | 33 |
2 files changed, 46 insertions, 4 deletions
diff --git a/mcs/class/System.XML/System.Xml/ChangeLog b/mcs/class/System.XML/System.Xml/ChangeLog index 46f372f9efb..e4a37364105 100644 --- a/mcs/class/System.XML/System.Xml/ChangeLog +++ b/mcs/class/System.XML/System.Xml/ChangeLog @@ -1,3 +1,20 @@ +2010-01-15 Atsushi Enomoto <atsushi@ximian.com> + + * XmlConvert.cs : Do not ignore ticks which are less than a + millisecond. Remove trailing zeros for milliseconds and ticks. + +2010-01-15 Atsushi Enomoto <atsushi@ximian.com> + + * XmlConvert.cs : trim spaces when parsing TimeSpan. + +2010-01-15 Atsushi Enomoto <atsushi@ximian.com> + + * XmlConvert.cs : shorten format string patterns. + +2010-01-15 Atsushi Enomoto <atsushi@ximian.com> + + * XmlConvert.cs : DateTimeOffset parse is sloppy. + 2010-01-12 Atsushi Enomoto <atsushi@ximian.com> * XmlConvert.cs : handle Infinity and -Infinity here due to the diff --git a/mcs/class/System.XML/System.Xml/XmlConvert.cs b/mcs/class/System.XML/System.Xml/XmlConvert.cs index dec3fbc5d2a..4d08f180ac1 100644 --- a/mcs/class/System.XML/System.Xml/XmlConvert.cs +++ b/mcs/class/System.XML/System.Xml/XmlConvert.cs @@ -54,6 +54,20 @@ namespace System.Xml { static readonly string [] datetimeFormats = { // dateTime +#if NET_2_0 + "yyyy-MM-ddTHH:mm:sszzz", + "yyyy-MM-ddTHH:mm:ss.FFFFFFFzzz", + "yyyy-MM-ddTHH:mm:ssZ", + "yyyy-MM-ddTHH:mm:ss.FFFFFFFZ", + "yyyy-MM-ddTHH:mm:ss", + "yyyy-MM-ddTHH:mm:ss.FFFFFFF", + "HH:mm:ss", + "HH:mm:ss.FFFFFFF", + "HH:mm:sszzz", + "HH:mm:ss.FFFFFFFzzz", + "HH:mm:ssZ", + "HH:mm:ss.FFFFFFFZ", +#else // it is not required in trunk but should make it easy to backport... "yyyy-MM-ddTHH:mm:sszzz", "yyyy-MM-ddTHH:mm:ss.fzzz", "yyyy-MM-ddTHH:mm:ss.ffzzz", @@ -103,6 +117,7 @@ namespace System.Xml { "HH:mm:ss.fffffZ", "HH:mm:ss.ffffffZ", "HH:mm:ss.fffffffZ", +#endif // date "yyyy-MM-dd", "yyyy-MM-ddzzz", @@ -542,19 +557,25 @@ namespace System.Xml { builder.Append ('P'); if (value.Days > 0) builder.Append (value.Days).Append ('D'); - if (value.Days > 0 || value.Hours > 0 || value.Minutes > 0 || value.Seconds > 0 || value.Milliseconds > 0) { + long ticks = value.Ticks % TimeSpan.TicksPerMillisecond; + if (value.Days > 0 || value.Hours > 0 || value.Minutes > 0 || value.Seconds > 0 || value.Milliseconds > 0 || ticks > 0) { builder.Append('T'); if (value.Hours > 0) builder.Append (value.Hours).Append ('H'); if (value.Minutes > 0) builder.Append (value.Minutes).Append ('M'); - if (value.Seconds > 0 || value.Milliseconds > 0) { + if (value.Seconds > 0 || value.Milliseconds > 0 || ticks > 0) { builder.Append (value.Seconds); - long ticks = value.Ticks % TimeSpan.TicksPerMillisecond; + bool trimZero = true; if (ticks > 0) builder.Append ('.').AppendFormat ("{0:0000000}", value.Ticks % TimeSpan.TicksPerSecond); else if (value.Milliseconds > 0) builder.Append ('.').AppendFormat ("{0:000}", value.Milliseconds); + else + trimZero = false; + if (trimZero) + while (builder [builder.Length - 1] == '0') + builder.Remove (builder.Length - 1, 1); builder.Append ('S'); } @@ -635,6 +656,7 @@ namespace System.Xml { public static TimeSpan ToTimeSpan(string s) { + s = s.Trim (XmlChar.WhitespaceChars); if (s.Length == 0) throw new FormatException ("Invalid format string for duration schema datatype."); @@ -871,7 +893,10 @@ namespace System.Xml { public static DateTimeOffset ToDateTimeOffset (string s, string [] formats) { - return DateTimeOffset.ParseExact (s, formats, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal); + DateTimeStyles style = DateTimeStyles.AllowLeadingWhite | + DateTimeStyles.AllowTrailingWhite | + DateTimeStyles.AssumeUniversal; + return DateTimeOffset.ParseExact (s, formats, CultureInfo.InvariantCulture, style); } public static string ToString (DateTimeOffset value) |