IsLeapYear() public static method

public static IsLeapYear ( int year ) : bool
year int
return bool
Ejemplo n.º 1
0
 public void DateExceptions()
 {
     Assert.ThrowsException <ArgumentOutOfRangeException>(() => { Date d = new Date(0, 1, 1); });
     Assert.ThrowsException <ArgumentOutOfRangeException>(() => { Date d = new Date(2000, -1, 1); });
     Assert.ThrowsException <ArgumentOutOfRangeException>(() => { Date d = new Date(2000, 1, 32); });
     Assert.ThrowsException <ArgumentOutOfRangeException>(() => Date.IsLeapYear(-1));
     Assert.ThrowsException <ArgumentNullException>(() => new Date(2000, 1, 15).ToString((string)null !));
 }
Ejemplo n.º 2
0
        public void IsLeapYearTest()
        {
            var  year             = int.Parse(TestContext.DataRow["year"].ToString());
            var  isLeapYearString = TestContext.DataRow["isLeapYear"].ToString();
            bool expected         = (isLeapYearString == "1");

            var actual = Date.IsLeapYear(year);

            Assert.AreEqual(expected, actual, "Input Year:<{0}>.", year);
        }
Ejemplo n.º 3
0
            public override double yearFraction(Date d1, Date d2, Date refPeriodStart, Date refPeriodEnd)
            {
                if (d1 == d2)
                {
                    return(0);
                }
                if (d1 > d2)
                {
                    return(-yearFraction(d2, d1, null, null));
                }

                Date   newD2 = d2, temp = d2;
                double sum = 0;

                while (temp > d1)
                {
                    temp = newD2 - TimeUnit.Years;
                    if (temp.Day == 28 && temp.Month == 2 && Date.IsLeapYear(temp.Year))
                    {
                        temp += 1;
                    }
                    if (temp >= d1)
                    {
                        sum  += 1;
                        newD2 = temp;
                    }
                }

                double den = 365;

                if (Date.IsLeapYear(newD2.Year))
                {
                    temp = new Date(29, Month.February, newD2.Year);
                    if (newD2 > temp && d1 <= temp)
                    {
                        den += 1;
                    }
                }
                else if (Date.IsLeapYear(d1.Year))
                {
                    temp = new Date(29, Month.February, d1.Year);
                    if (newD2 > temp && d1 <= temp)
                    {
                        den += 1;
                    }
                }

                return(sum + dayCount(d1, newD2) / den);
            }
Ejemplo n.º 4
0
 public void IsLeapYear()
 {
     // AA2, p.62
     Assert.IsTrue(Date.IsLeapYear(900));
     Assert.IsTrue(Date.IsLeapYear(1236));
     Assert.IsFalse(Date.IsLeapYear(750));
     Assert.IsFalse(Date.IsLeapYear(1429));
     Assert.IsFalse(Date.IsLeapYear(1700));
     Assert.IsFalse(Date.IsLeapYear(1800));
     Assert.IsFalse(Date.IsLeapYear(1900));
     Assert.IsFalse(Date.IsLeapYear(2100));
     Assert.IsTrue(Date.IsLeapYear(1600));
     Assert.IsTrue(Date.IsLeapYear(2000));
     Assert.IsTrue(Date.IsLeapYear(2400));
 }
Ejemplo n.º 5
0
        public void DateProperties()
        {
            Date date = new Date(1970, 5, 20);

            Assert.AreEqual(1970, date.Year);
            Assert.AreEqual(5, date.Month);
            Assert.AreEqual(20, date.Day);
            Assert.AreEqual(DayOfWeek.Wednesday, date.DayOfWeek);
            Assert.AreEqual(140, date.DayOfYear);

            Assert.AreEqual(28, Date.DaysInMonth(1970, 2));
            Assert.AreEqual(29, Date.DaysInMonth(2016, 2));

            Assert.IsFalse(Date.IsLeapYear(1900));      // 100-year exception
            Assert.IsFalse(Date.IsLeapYear(1970));
            Assert.IsTrue(Date.IsLeapYear(1996));
            Assert.IsFalse(Date.IsLeapYear(1997));
            Assert.IsFalse(Date.IsLeapYear(1998));
            Assert.IsFalse(Date.IsLeapYear(1999));
            Assert.IsTrue(Date.IsLeapYear(2000));       // 400-year exception
            Assert.IsTrue(Date.IsLeapYear(2016));

            date = new Date(1900, 5, 20);
            Assert.AreEqual(1900, date.Year);
            Assert.AreEqual(5, date.Month);
            Assert.AreEqual(20, date.Day);
            Assert.AreEqual(140, date.DayOfYear);

            date = new Date(1999, 5, 20);
            Assert.AreEqual(1999, date.Year);
            Assert.AreEqual(5, date.Month);
            Assert.AreEqual(20, date.Day);
            Assert.AreEqual(140, date.DayOfYear);

            date = new Date(2000, 5, 20);
            Assert.AreEqual(2000, date.Year);
            Assert.AreEqual(5, date.Month);
            Assert.AreEqual(20, date.Day);
            Assert.AreEqual(141, date.DayOfYear);

            date = new Date(2000, 5, 20);
            int daysSinceStart = date.DaysSinceCalendarStart;

            date = new Date(2000, 5, 21);
            Assert.AreEqual(daysSinceStart + 1, date.DaysSinceCalendarStart);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 两个日期之间的天数
        /// </summary>
        /// <param name="startDate">开始日</param>
        /// <param name="endDate">结束日</param>
        /// <returns>天数</returns>
        public double DaysInPeriod(Date startDate, Date endDate)
        {
            var startYear = startDate.Year;
            var endYear   = endDate.Year;

            var excludedDayCount = 0;

            for (var year = startYear; year <= endYear; ++year)
            {
                if (Date.IsLeapYear(year))
                {
                    var leapDate = new Date(year, 2, 29);
                    if (leapDate.Between(startDate, endDate))
                    {
                        ++excludedDayCount;
                    }
                }
            }

            return(endDate - startDate - excludedDayCount);
        }
Ejemplo n.º 7
0
            public override double yearFraction(Date d1, Date d2, Date refPeriodStart, Date refPeriodEnd)
            {
                if (d1 == d2)
                {
                    return(0);
                }
                if (d1 > d2)
                {
                    return(-yearFraction(d2, d1, null, null));
                }

                int    y1 = d1.Year, y2 = d2.Year;
                double dib1 = (Date.IsLeapYear(y1) ? 366 : 365);
                double dib2 = (Date.IsLeapYear(y2) ? 366 : 365);

                double sum = y2 - y1 - 1;

                sum += dayCount(d1, new Date(1, Month.January, y1 + 1)) / dib1;
                sum += dayCount(new Date(1, Month.January, y2), d2) / dib2;
                return(sum);
            }
Ejemplo n.º 8
0
        /// <summary>
        /// 通过基准日期和日期差,计算目标日期
        /// </summary>
        /// <param name="startDate">基准日期</param>
        /// <param name="dayCountFraction">日期差</param>
        /// <param name="referenceStartDate">参考开始日</param>
        /// <param name="referenceEndDate">参考结束日</param>
        /// <returns>目标日期</returns>
        public Date CalcEndDateFromDayCountFraction(Date startDate, double dayCountFraction, Date referenceStartDate, Date referenceEndDate)
        {
            var yrs          = Convert.ToInt16(dayCountFraction);
            var startYear    = startDate.Year;
            var endYear      = startYear + yrs;
            var guessEndDate = startDate.AddDays(Convert.ToInt16(dayCountFraction * 365.0));

            var includedDayCount = 0;

            for (var year = startYear; year <= endYear; ++year)
            {
                if (Date.IsLeapYear(year))
                {
                    var leapDate = new Date(year, 2, 29);
                    if (leapDate.Between(startDate, guessEndDate))
                    {
                        ++includedDayCount;
                    }
                }
            }

            //Note: potential issue:  end day could be  (2,28) or  (2,29),  we return (2,28)
            return(startDate.AddDays(Convert.ToInt16(dayCountFraction * 365.0) + includedDayCount));
        }
Ejemplo n.º 9
0
        public void testConsistency()
        {
            //("Testing dates...");

            int minDate = Date.minDate().serialNumber() + 1,
                maxDate = Date.maxDate().serialNumber();

            int dyold = new Date(minDate - 1).DayOfYear,
                dold  = new Date(minDate - 1).Day,
                mold  = new Date(minDate - 1).Month,
                yold  = new Date(minDate - 1).Year,
                wdold = new Date(minDate - 1).weekday();

            for (int i = minDate; i <= maxDate; i++)
            {
                Date t      = new Date(i);
                int  serial = t.serialNumber();

                // check serial number consistency
                if (serial != i)
                {
                    QAssert.Fail("inconsistent serial number:\n"
                                 + "    original:      " + i + "\n"
                                 + "    date:          " + t + "\n"
                                 + "    serial number: " + serial);
                }

                int dy = t.DayOfYear,
                    d  = t.Day,
                    m  = t.Month,
                    y  = t.Year,
                    wd = t.weekday();

                // check if skipping any date
                if (!((dy == dyold + 1) ||
                      (dy == 1 && dyold == 365 && !Date.IsLeapYear(yold)) ||
                      (dy == 1 && dyold == 366 && Date.IsLeapYear(yold))))
                {
                    QAssert.Fail("wrong day of year increment: \n"
                                 + "    date: " + t + "\n"
                                 + "    day of year: " + dy + "\n"
                                 + "    previous:    " + dyold);
                }
                dyold = dy;

                if (!((d == dold + 1 && m == mold && y == yold) ||
                      (d == 1 && m == mold + 1 && y == yold) ||
                      (d == 1 && m == 1 && y == yold + 1)))
                {
                    QAssert.Fail("wrong day,month,year increment: \n"
                                 + "    date: " + t + "\n"
                                 + "    day,month,year: "
                                 + d + "," + m + "," + y + "\n"
                                 + "    previous:       "
                                 + dold + "," + mold + "," + yold);
                }
                dold = d; mold = m; yold = y;

                // check month definition
                if (m < 1 || m > 12)
                {
                    QAssert.Fail("invalid month: \n"
                                 + "    date:  " + t + "\n"
                                 + "    month: " + m);
                }

                // check day definition
                if (d < 1)
                {
                    QAssert.Fail("invalid day of month: \n"
                                 + "    date:  " + t + "\n"
                                 + "    day: " + d);
                }
                if (!((m == 1 && d <= 31) ||
                      (m == 2 && d <= 28) ||
                      (m == 2 && d == 29 && Date.IsLeapYear(y)) ||
                      (m == 3 && d <= 31) ||
                      (m == 4 && d <= 30) ||
                      (m == 5 && d <= 31) ||
                      (m == 6 && d <= 30) ||
                      (m == 7 && d <= 31) ||
                      (m == 8 && d <= 31) ||
                      (m == 9 && d <= 30) ||
                      (m == 10 && d <= 31) ||
                      (m == 11 && d <= 30) ||
                      (m == 12 && d <= 31)))
                {
                    QAssert.Fail("invalid day of month: \n"
                                 + "    date:  " + t + "\n"
                                 + "    day: " + d);
                }

                // check weekday definition
                if (!((wd == wdold + 1) ||
                      (wd == 1 && wdold == 7)))
                {
                    QAssert.Fail("invalid weekday: \n"
                                 + "    date:  " + t + "\n"
                                 + "    weekday:  " + wd + "\n"
                                 + "    previous: " + wdold);
                }
                wdold = wd;

                // create the same date with a different constructor
                Date s = new Date(d, m, y);
                // check serial number consistency
                serial = s.serialNumber();
                if (serial != i)
                {
                    QAssert.Fail("inconsistent serial number:\n"
                                 + "    date:          " + t + "\n"
                                 + "    serial number: " + i + "\n"
                                 + "    cloned date:   " + s + "\n"
                                 + "    serial number: " + serial);
                }
            }
        }
Ejemplo n.º 10
0
 public void CannotDetermineLeapYear_TooLarge()
 {
     Assert.Throws <ArgumentOutOfRangeException>(() => Date.IsLeapYear(10000));
 }
Ejemplo n.º 11
0
 public void CanDetermineLeapYear_2100()
 {
     Assert.False(Date.IsLeapYear(2100));
 }
Ejemplo n.º 12
0
 public void CanDetermineLeapYear_2004()
 {
     Assert.True(Date.IsLeapYear(2004));
 }
Ejemplo n.º 13
0
 public void CanDetermineLeapYear_2001()
 {
     Assert.False(Date.IsLeapYear(2001));
 }
Ejemplo n.º 14
0
 public void IsLeapYear_ForOrdinalYear_ReturnsFalse()
 {
     Assert.IsFalse(Date.IsLeapYear(2001));
 }
Ejemplo n.º 15
0
 public void IsLeapYear_ForLeapYear_ReturnsTrue()
 {
     Assert.IsTrue(Date.IsLeapYear(2000));
 }