Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAtsushi Eno <atsushieno@gmail.com>2010-01-15 15:40:53 +0300
committerAtsushi Eno <atsushieno@gmail.com>2010-01-15 15:40:53 +0300
commit159dce275c8128b7e1a87b11fa1b2df78343506b (patch)
tree0ebfee43506ff0e9abb7b2eebc0b703d78929c87 /mcs/class/System.XML/System.Xml
parent8d4203be63174becfa4198210f89c1d1817c7e3c (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/ChangeLog17
-rw-r--r--mcs/class/System.XML/System.Xml/XmlConvert.cs33
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)