Errornous calculation of year/month/day between two dates

What I try to do is calculate the number of years, months and days between two dates. Unfortunately, there is no method of the .NET Framework which can do this.

What I did is basically the following: http://www.codeproject.com/Articles/28837/Calculating-Duration-Between-Two-Dates-in-Years-Mo

with a few adaptations from the comments of said website:

var monthDay = new[] { 31, 31, -1, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

DayCalculation:

if (fromDate.Day > toDate.Day)
{
    increment = monthDay[toDate.Month - 1];
}

if (increment == -1)
{
    increment = DateTime.IsLeapYear(toDate.Year) ? 29 : 28;
}

So I have the following effect:

Date1: 1979-01-30

Date2: 2013-03-01

And the output is: 34 Years, 1 Month, -1 Day

The expected output is: 34 Years, 1 Month, 1 Day

This effect happens every time, the Date2 is a date in march.

Do you know what is wrong with this calculation? Or do you know a better solution how to achieve the desired result?

Thanks in advance

PS: I know that you can calculate the amount of days between two dates, but what I need is the amount of finished years, the amount of finished months, and the amount of finished days

Jon Skeet
people
quotationmark

Unfortunately, there is no method of the .NET Framework which can do this.

True, but there is Noda Time instead :) (It's my port of Joda Time to .NET, although there are quite a few differences between the two projects.)

LocalDate start = new LocalDate(1979, 1, 30);
LocalDate end = new LocalDate(2013, 3, 1);
Period period = Period.Between(start, end);
Console.WriteLine("{0} years, {1} months, {2} days",
                  period.Years, period.Months, period.Days);

Output:

34 years, 1 months, 1 days

people

See more on this question at Stackoverflow