Today, leap year is calculated as occuring almost every four years. More precisely it is every year divisible by 4 that is not divisible by 100, unless it is also divisible by 400.

Hence, 1996, 2000, and 2004 are leap years, but 1900 and 2100 are not. Year 2000 is a leap year becuase it is divisible by 400. Here is the C# code for this alogorithm:

public static bool isLeapYear(int year) { if (year % 4 != 0) { return false; } if (year % 400 == 0) { return true; } return (year % 100 != 0); }

The number of days of the month go by this poem:

Thirty days has September,

April, June, and November;

All the rest have thirty-one,

Except February which will alternate

Between twenty-nine on leap year

And a normal twenty-eight.

You can use an array to encapsulate the months as follows:

public static readonly int[] days_in_month[] = new int[] {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; //Where January is days_in_month[0] and December is days_in_month[11]: public const int JANUARY=0, FEBRUARY=1, MARCH=2, APRIL=3, MAY=4, JUNE=5, JULY=6, AUGUST=7, SEPTEMBER=8, OCTOBER=9, NOVEMBER=10, DECEMBER=11; //be sure to remember array starts at 0 -- there is no month 12. public static int getDaysInMonth(int Mon, int Year){ if (Mon != FEBRUARY) return days_in_month[Mon]; return isLeapYear(Year) ? 29 : 28; } int NumDays = getDaysInMonth(FEBRUARY, 2000);

*Oracle^{TM} and Java^{TM}
are registered trademarks
of Oracle and or its affiliates.
Other names may be trademarks of their respective owners.*