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
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 :)
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);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With