//
// Authors:
// Stephane Delcroix (sdelcroix@novell.com)
+// Marek Safar (marek.safar@gmail.com)
//
// Copyright (C) 2007 Novell, Inc (http://www.novell.com)
+// Copyright 2012 Xamarin, Inc (http://www.xamarin.com)
//
-#if NET_2_0
using System.Globalization;
using NUnit.Framework;
using System;
Assert.AreEqual (dto.ToString ("r", new CultureInfo ("en-us")), dto.ToString ("R", new CultureInfo ("en-us")));
Assert.AreEqual ("2007-10-31T21:00:00", dto.ToString ("s", new CultureInfo ("en-us")));
Assert.AreEqual ("2007-11-01 05:00:00Z", dto.ToString ("u", new CultureInfo ("en-us")));
- Assert.AreEqual ("October, 2007", dto.ToString ("Y", new CultureInfo ("en-us")));
+ Assert.AreEqual ("October 2007", dto.ToString ("Y", new CultureInfo ("en-us")));
Assert.AreEqual (dto.ToString ("y", new CultureInfo ("en-us")), dto.ToString ("Y", new CultureInfo ("en-us")));
}
"M/dd/yyyy",
"M/d/y",
"M/d/yy",
- "M/d/yyy",
+// "M/d/yyy", // this fails on .NET 2.0 (3.5) and 4.0
"M/d/yyyy",
"M/d/yyyyy",
"M/d/yyyyyy",
"M/d/yyyy H:m zzz", "MM/d/yyyy H:m zzz",
"M/dd/yy H:m zzz", "MM/dd/yy H:m zzz",
"M/d/yy H:m zzz", "M/d/yy H:m zzz",
- "ddd dd MMM yyyy h:mm tt zzz",
+ "ddd dd MMM yyyy h:mm tt zzz",
+ "o", "O",
+ "r", "R",
+ "u",
};
foreach (DateTimeOffset dto in dtos)
Assert.AreEqual (dto, DateTimeOffset.ParseExact (serialized, format, fp), format);
}
}
+
+ //
+ // Tests that we can parse the K format specifier which is a 4 digit offset
+ // see bug 589227
+ //
+ [Test]
+ public void ParseExactWithKFormat ()
+ {
+ DateTimeOffset o = DateTimeOffset.ParseExact ("Wed Mar 17 22:25:08 +0000 2010", "ddd MMM d H:m:ss K yyyy", CultureInfo.InvariantCulture);
+ }
+
+ [Test]
+ public void ParseExactCustomFormat ()
+ {
+ var dt = DateTimeOffset.ParseExact ("Sunday, 06-Nov-94 08:49:37 GMT", "dddd, dd'-'MMM'-'yy HH:mm:ss 'GMT'", CultureInfo.InvariantCulture);
+ Assert.AreEqual (new DateTimeOffset (1994, 11, 6, 8, 49, 37, TimeZone.CurrentTimeZone.GetUtcOffset (DateTime.Now)), dt);
+ }
+
[Test]
public void ParseExactYearFormat ()
{
};
string[] formats = {
- "M/d/yyy H:m zzz",
+// "M/d/yyy H:m zzz", // fails under .NET 2.0 and 4.0.
"M/d/yyyy H:m zzz",
"M/d/yyyyy H:m zzz",
"M/d/yyyyyy H:m zzz",
}
+ [Test]
+ public void ParseExactOffsetFormat ()
+ {
+ CultureInfo fp = CultureInfo.InvariantCulture;
+ string[] dates = {
+ "13/Oct/2009:22:35:35 +09:00",
+ "13/Oct/2009:22:35:35 +0900",
+ "13/Oct/2009:22:35:35 +09:30",
+ "13/Oct/2009:22:35:35 +0930",
+ };
+ TimeSpan[] offsets = {
+ new TimeSpan (9,0,0),
+ new TimeSpan (9,0,0),
+ new TimeSpan (9,30,0),
+ new TimeSpan (9,30,0),
+ };
+
+ for (int i = 0; i < dates.Length; i++)
+ Assert.AreEqual(offsets[i], DateTimeOffset.ParseExact (dates[i], "d/MMM/yyyy:HH:mm:ss zzz", fp).Offset, dates[i]);
+ }
+
[Test]
[ExpectedException (typeof (FormatException))]
public void ParseExactYearException ()
DateTimeOffset.ParseExact(date, format, fp);
}
+ [Test]
+ [ExpectedException (typeof (FormatException))]
+ public void ParseExactFormatException5 ()
+ {
+ CultureInfo fp = CultureInfo.InvariantCulture;
+ string format = "U";
+ string date = "Mon 14 Jan 2008 2:56 PM +01: 00";
+ DateTimeOffset.ParseExact (date, format, fp);
+ }
+
[Test]
public void ParseExactWithSeconds ()
{
}
[Test]
- [ExpectedException (typeof (ArgumentOutOfRangeException))]
+ [ExpectedException (typeof (FormatException))]
public void ParseUnderflow ()
{
- DateTimeOffset.Parse ("01/01/0001 0:0 +09:00");
+ DateTimeOffset.Parse ("01/01/0001 0:0 +09:00", new CultureInfo ("en-US"));
}
[Test]
- [ExpectedException (typeof (ArgumentOutOfRangeException))]
+ [ExpectedException (typeof (FormatException))]
public void ParseOverflow ()
{
- DateTimeOffset.Parse ("12/31/9999 23:59 -09:00");
+ DateTimeOffset.Parse ("12/31/9999 23:59 -09:00", new CultureInfo ("en-US"));
}
[Test]
}
}
+ [Test]
+ public void ParseExactPreserveFractions ()
+ {
+ var s = "1999-06-10T21:27:03.1147764+02:00";
+ var d = DateTimeOffset.ParseExact (s, "yyyy-MM-ddTHH:mm:ss.FFFFFFFzzz", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
+ Assert.AreEqual (630646468231147764, d.Ticks, "#1");
+ }
+
[Test]
public void EqualsObject ()
{
}
return result;
}
-
+
+ [Test]
+ public void ArithmeticAccrossDSTBoudaries ()
+ {
+ DateTime dt = new DateTime (633954393584177800, DateTimeKind.Local); //Dec 3, 2009, 12:16
+ DateTimeOffset dto = new DateTimeOffset (dt);
+ DateTimeOffset dto2 = dto.AddDays (-60); //Should cross the late Oct boundary in most part of the world
+ Assert.AreEqual (dto.Offset, dto2.Offset);
+ Assert.AreEqual (dt.AddDays (-60), dto2.DateTime);
+ }
}
}
-#endif