//
// 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)
//
using System.Globalization;
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")));
}
Assert.AreEqual ("Thursday, Nov 01 2007 09:00:00 -07:00", dto.ToString (format, null as DateTimeFormatInfo), "ts1");
Assert.AreEqual ("Thursday, Nov 01 2007 09:00:00 -07:00", dto.ToString (format, CultureInfo.InvariantCulture), "ts2");
Assert.AreEqual ("jeudi, nov. 01 2007 09:00:00 -07:00", dto.ToString (format, new CultureInfo ("fr-FR")), "ts3");
- Assert.AreEqual ("jueves, nov 01 2007 09:00:00 -07:00", dto.ToString (format, new CultureInfo ("es-ES")), "ts4");
+ Assert.AreEqual ("jueves, Nov. 01 2007 09:00:00 -07:00", dto.ToString (format, new CultureInfo ("es-ES")), "ts4");
}
[Test]
"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)
[Test]
public void ParseExactWithKFormat ()
{
- DateTimeOffset o = DateTimeOffset.ParseExact ("Wed Mar 17 22:25:08 +0000 2010", "ddd MMM d H:m:ss K yyyy", null);
+ 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]
};
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",
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", new CultureInfo ("en-US"));
}
[Test]
- [ExpectedException (typeof (ArgumentOutOfRangeException))]
+ [ExpectedException (typeof (FormatException))]
public void ParseOverflow ()
{
DateTimeOffset.Parse ("12/31/9999 23:59 -09:00", new CultureInfo ("en-US"));
Assert.AreEqual (dto.Offset, dto2.Offset);
Assert.AreEqual (dt.AddDays (-60), dto2.DateTime);
}
+
+ [Test]
+ public void TestPartialDateTimeParsing ()
+ {
+ var now = DateTime.Now;
+ const DateTimeStyles style = DateTimeStyles.AssumeUniversal;
+
+ //year
+ var date = DateTimeOffset.ParseExact ("2003", "yyyy", CultureInfo.InvariantCulture, style);
+ var expected = "01/01/2003 00:00:00 +00:00";
+ Assert.AreEqual (expected, date.ToString (CultureInfo.InvariantCulture));
+
+ //month
+ date = DateTimeOffset.ParseExact ("12", "MM", CultureInfo.InvariantCulture, style);
+ expected = string.Format ("12/01/{0} 00:00:00 +00:00", now.Year);
+ Assert.AreEqual (expected, date.ToString (CultureInfo.InvariantCulture));
+
+ //day
+ date = DateTimeOffset.ParseExact ("29", "dd", CultureInfo.InvariantCulture, style);
+ expected = string.Format ("01/29/{0} 00:00:00 +00:00", now.Year);
+ Assert.AreEqual (expected, date.ToString (CultureInfo.InvariantCulture));
+
+ //hours
+ date = DateTimeOffset.ParseExact ("06", "HH", CultureInfo.InvariantCulture, style);
+ expected = string.Format ("{0:D2}/{1:D2}/{2} 06:00:00 +00:00", now.Month, now.Day, now.Year);
+ Assert.AreEqual (expected, date.ToString (CultureInfo.InvariantCulture));
+
+ //minutes
+ date = DateTimeOffset.ParseExact ("45", "mm", CultureInfo.InvariantCulture, style);
+ expected = string.Format ("{0:D2}/{1:D2}/{2} 00:45:00 +00:00", now.Month, now.Day, now.Year);
+ Assert.AreEqual (expected, date.ToString (CultureInfo.InvariantCulture));
+
+ //seconds
+ date = DateTimeOffset.ParseExact ("45", "ss", CultureInfo.InvariantCulture, style);
+ expected = string.Format ("{0:D2}/{1:D2}/{2} 00:00:45 +00:00", now.Month, now.Day, now.Year);
+ Assert.AreEqual (expected, date.ToString (CultureInfo.InvariantCulture));
+ }
+
+ [Test]
+ public void TestDateOnlyWithTimeOffset ()
+ {
+ var fp = CultureInfo.InvariantCulture;
+ var date = DateTimeOffset.Parse("2013-11-07+11:00", fp, DateTimeStyles.AssumeUniversal);
+ var expected = string.Format ("{0:D2}/{1:D2}/{2} 00:00:00 +11:00", 11, 7, 2013);
+ Assert.AreEqual (expected, date.ToString (CultureInfo.InvariantCulture));
+ }
+
+ [Test]
+ public void GMTDateTime ()
+ {
+ var date = DateTimeOffset.Parse ("Wed, 10 Sep 2014 22:01:40 GMT", CultureInfo.InvariantCulture);
+ var expected = "09/10/2014 22:01:40 +00:00";
+ Assert.AreEqual (expected, date.ToString (CultureInfo.InvariantCulture));
+ }
}
}