+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.
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');
}
+2010-01-15 Atsushi Enomoto <atsushi@ximian.com>
+
+ * XmlConvertTests.cs : add test for ToString(TimeSpan) with small
+ ticks.
+
2010-01-15 Atsushi Enomoto <atsushi@ximian.com>
* XmlConvertTests.cs : add test for ToTimeSpan() with spaces.
// bug #77252
TimeSpan t1 = TimeSpan.FromTicks (
TimeSpan.TicksPerSecond + 1);
- Assert.AreEqual ("PT1.0000001S", XmlConvert.ToString (t1));
+ Assert.AreEqual ("PT1.0000001S", XmlConvert.ToString (t1), "#1");
+
+ // XAttributeTest.CastTimeSpans():#5d
+ t1 = new TimeSpan (2710L);
+ Assert.AreEqual ("PT0.000271S", XmlConvert.ToString (t1), "#2");
+ t1 = new TimeSpan (27100000L);
+ Assert.AreEqual ("PT2.71S", XmlConvert.ToString (t1), "#3");
}
[Test]