给定日期时间的年龄,小数精度

Bla*_*man 4 c# datetime

如何在C#datetime中获得给定出生日期的人的年龄.

我想要一个40.69岁的精确年龄

Guf*_*ffa 10

这将计算确切的年龄.年龄的小数部分是相对于上一个和下一个生日之间的天数计算的,因此它将正确处理闰年.

小数部分在一年中是线性的(并没有考虑到月份的不同长度),如果你想表达一个分数年龄,这似乎最有意义.

// birth date
DateTime birthDate = new DateTime(1968, 07, 14);

// get current date (don't call DateTime.Today repeatedly, as it changes)
DateTime today = DateTime.Today;
// get the last birthday
int years = today.Year - birthDate.Year;
DateTime last = birthDate.AddYears(years);
if (last > today) {
    last = last.AddYears(-1);
    years--;
}
// get the next birthday
DateTime next = last.AddYears(1);
// calculate the number of days between them
double yearDays = (next - last).Days;
// calcluate the number of days since last birthday
double days = (today - last).Days;
// calculate exaxt age
double exactAge = (double)years + (days / yearDays);
Run Code Online (Sandbox Code Playgroud)

  • 在获得下一个生日那天,AddYears无法正确处理关于年龄的leap年。假设您的生日是2008年2月29日。如果加上1年,它会给您2008-02-28而不是2008-03-01的信息。 (2认同)

spl*_*tne 5

这将是一个近似计算:

 TimeSpan span = DateTime.Today.Subtract(birthDate);
 Console.WriteLine( "Age: " + (span.TotalDays / 365.25).toString() );
Run Code Online (Sandbox Code Playgroud)

顺便说一句:请参阅Stack Overflow上的这个问题:如何计算C#中某人的年龄?