Reputation: 4535
Does anyone have an algorithm in c# to accurately calculate an age given a DateTime in the format Years.Months?
eg.
Answer: 23.4
DOB: 31-Mar-1991
Answer: 20.10
DOB: 25-Feb-1991
thanks
Upvotes: 8
Views: 3864
Reputation: 883
This method doesn't require any external libraries:
private static string AgeInYearsMonths(DateTime? DateOfBirth)
{
if (DateOfBirth == null) return "";
if (DateOfBirth >= DateTime.Today)
throw new ArgumentException("DateOfBirth cannot be in future!");
DateTime d = DateOfBirth.Value;
int monthCount = 0;
while ((d = d.AddMonths(1)) <= DateTime.Today)
{
monthCount++;
}
return string.Format("{0}.{1}", monthCount / 12, monthCount % 12);
}
Upvotes: 3
Reputation: 5458
var date=new DateTime(DateTime.Now.Subtract(new DateTime(1988,10,31)).Ticks);
Console.WriteLine((date.Year-1).ToString()+"."+(date.Month-1).ToString());
Upvotes: -1
Reputation: 1500495
You can do this in Noda Time fairly easily:
using System;
using NodaTime;
class Test
{
static void Main()
{
ShowAge(1988, 9, 6);
ShowAge(1991, 3, 31);
ShowAge(1991, 2, 25);
}
private static readonly PeriodType YearMonth =
PeriodType.YearMonthDay.WithDaysRemoved();
static void ShowAge(int year, int month, int day)
{
var birthday = new LocalDate(year, month, day);
// For consistency for future readers :)
var today = new LocalDate(2012, 2, 3);
Period period = Period.Between(birthday, today, YearMonth);
Console.WriteLine("Birthday: {0}; Age: {1} years, {2} months",
birthday, period.Years, period.Months);
}
}
Doing it with just .NET's DateTime
support would be possible, but you'd have to do the arithmetic yourself, basically. And it almost certainly wouldn't be as clear. Not that I'm biased or anything :)
Upvotes: 13