Esempio n. 1
0
        public void CanRoundTrip()
        {
            // Date
            Assert.AreEqual("2001-02-03", ExtendedDateTime.Parse("2001-02-03").ToString());
            Assert.AreEqual("2008-12", ExtendedDateTime.Parse("2008-12").ToString());
            Assert.AreEqual("2008", ExtendedDateTime.Parse("2008").ToString());
            Assert.AreEqual("-0999", ExtendedDateTime.Parse("-0999").ToString());
            Assert.AreEqual("0000", ExtendedDateTime.Parse("0000").ToString());

            // Date and Time
            Assert.AreEqual("2001-02-03T09:30:01-08", ExtendedDateTime.Parse("2001-02-03T09:30:01-08").ToString());
            Assert.AreEqual("2004-01-01T10:10:10Z", ExtendedDateTime.Parse("2004-01-01T10:10:10Z").ToString());
            Assert.AreEqual("2004-01-01T10:10:10+05", ExtendedDateTime.Parse("2004-01-01T10:10:10+05").ToString());

            // Uncertain and Approximate
            Assert.AreEqual("1984?", ExtendedDateTime.Parse("1984?").ToString());
            Assert.AreEqual("2004-06?", ExtendedDateTime.Parse("2004-06?").ToString());
            Assert.AreEqual("2004-06-11?", ExtendedDateTime.Parse("2004-06-11?").ToString());
            Assert.AreEqual("1984~", ExtendedDateTime.Parse("1984~").ToString());
            Assert.AreEqual("1984?~", ExtendedDateTime.Parse("1984?~").ToString());

            // Years Exceeding Four Digits
            Assert.AreEqual("y170000002", ExtendedDateTime.Parse("y170000002").ToString());
            Assert.AreEqual("y-170000002", ExtendedDateTime.Parse("y-170000002").ToString());

            // Season
            Assert.AreEqual("2001-21", ExtendedDateTime.Parse("2001-21").ToString());
            Assert.AreEqual("2001-22", ExtendedDateTime.Parse("2001-22").ToString());
            Assert.AreEqual("2001-23", ExtendedDateTime.Parse("2001-23").ToString());
            Assert.AreEqual("2001-24", ExtendedDateTime.Parse("2001-24").ToString());

            // Partial Uncertain or Approximate
            Assert.AreEqual("2004?-06-11", ExtendedDateTime.Parse("2004?-06-11").ToString());
            Assert.AreEqual("2004-06~-11", ExtendedDateTime.Parse("2004-06~-11").ToString());
            Assert.AreEqual("2004-(06)?-11", ExtendedDateTime.Parse("2004-(06)?-11").ToString());
            Assert.AreEqual("2004-06-(11)~", ExtendedDateTime.Parse("2004-06-(11)~").ToString());
            Assert.AreEqual("2004-(06)?~", ExtendedDateTime.Parse("2004-(06)?~").ToString());
            Assert.AreEqual("2004?-06-(11)~", ExtendedDateTime.Parse("2004?-06-(11)~").ToString());
            Assert.AreEqual("2004?-(06)?~", ExtendedDateTime.Parse("2004?-(06)?~").ToString());
            Assert.AreEqual("(2004)?-06-04~", ExtendedDateTime.Parse("(2004)?-06-04~").ToString());
            Assert.AreEqual("(2011)-06-04~", ExtendedDateTime.Parse("(2011)-06-04~").ToString());
            Assert.AreEqual("2011-23~", ExtendedDateTime.Parse("2011-23~").ToString());

            // Exponential Form of Years Exceeding Four Digits
            Assert.AreEqual("y17e7", ExtendedDateTime.Parse("y17e7").ToString());
            Assert.AreEqual("y-17e7", ExtendedDateTime.Parse("y-17e7").ToString());
            Assert.AreEqual("y17101e4p3", ExtendedDateTime.Parse("y17101e4p3").ToString());
        }
Esempio n. 2
0
        public override object ConvertFrom(ITypeDescriptorContext context, Globalization.CultureInfo culture, object value)
        {
            if (value == null)
            {
                throw GetConvertFromException(value);
            }

            var source = value as string;

            if (source != null)
            {
                return(ExtendedDateTime.Parse(source));
            }

            return(base.ConvertFrom(context, culture, value));
        }
 public void CalculatesCorrectDifference()
 {
     Assert.AreEqual(TimeSpan.Zero, (ExtendedDateTime.Parse("2012") - ExtendedDateTime.Parse("2012")));
     Assert.AreEqual(TimeSpan.FromDays(1096), (ExtendedDateTime.Parse("2015") - ExtendedDateTime.Parse("2012")));       // 366 for 2012 (leap year) + 365 for 2013 + 365 for 2014 = 1096 days
     Assert.AreEqual(TimeSpan.Zero, (ExtendedDateTime.Parse("2012-01") - ExtendedDateTime.Parse("2012-01")));
     Assert.AreEqual(TimeSpan.FromDays(31), (ExtendedDateTime.Parse("2012-02") - ExtendedDateTime.Parse("2012-01")));
     Assert.AreEqual(TimeSpan.FromDays(365), (ExtendedDateTime.Parse("2013-03") - ExtendedDateTime.Parse("2012-03")));                                     // 31 days for 3/2012 + 30 days for 4/2012 + 31 days for 5/2012 + 30 days for 6/2012 + 31 days for 7/2012 + 31 days for 8/2012 + 30 days for 9/2012 + 31 days for 10/2012 + 30 days for 11/2012 + 31 days for 12/2012 + 31 days for 1/2013 + 28 days for 2/2013 = 365 days
     Assert.AreEqual(TimeSpan.Zero, (ExtendedDateTime.Parse("2012-02-02") - ExtendedDateTime.Parse("2012-02-02")));
     Assert.AreEqual(TimeSpan.FromDays(292), (ExtendedDateTime.Parse("2012-11-20") - ExtendedDateTime.Parse("2012-02-02")));                               // 28 days remaining in of February + 31 days in March + 30 days in April + 31 days in May + 30 days in June + 31 days in July + 31 days in August + 30 days in September + 31 days in October + 19 days passed into November = 292 days
     Assert.AreEqual(TimeSpan.Zero, (ExtendedDateTime.Parse("2012-03-03T03Z") - ExtendedDateTime.Parse("2012-03-03T03Z")));
     Assert.AreEqual(new TimeSpan(292, 18, 0, 0), (ExtendedDateTime.Parse("2012-11-20T20Z") - ExtendedDateTime.Parse("2012-02-02T02Z")));                  // 20 additional hours passed after the end day - 2 hours in to the beginning day = 18 additional hours
     Assert.AreEqual(TimeSpan.Zero, (ExtendedDateTime.Parse("2012-03-03T03:03Z") - ExtendedDateTime.Parse("2012-03-03T03:03Z")));
     Assert.AreEqual(new TimeSpan(292, 18, 18, 0), (ExtendedDateTime.Parse("2012-11-20T20:20Z") - ExtendedDateTime.Parse("2012-02-02T02:02Z")));           // 20 additional minutes passed after the end hour - 2 minutes in to the beginning hour = 18 additional minutes
     Assert.AreEqual(TimeSpan.Zero, (ExtendedDateTime.Parse("2012-03-03T03:03:03Z") - ExtendedDateTime.Parse("2012-03-03T03:03:03Z")));
     Assert.AreEqual(new TimeSpan(292, 18, 18, 18), (ExtendedDateTime.Parse("2012-11-20T20:20:20Z") - ExtendedDateTime.Parse("2012-02-02T02:02:02Z")));    // 20 additional seconds passed after the end minute - 2 seconds in to the beginning minute = 18 additional seconds
     Assert.AreEqual(new TimeSpan(291, 16, 0, 0), (ExtendedDateTime.Parse("2012-11-20T00:00:00-08:00") - ExtendedDateTime.Parse("2012-02-02T00:00:00Z"))); // 28 days remaining in of February + 31 days in March + 30 days in April + 31 days in May + 30 days in June + 31 days in July + 31 days in August + 30 days in September + 31 days in October + 19 days passed into November - 8 hours behind = 291.16 days
 }