如何在C#datetime中获得给定出生日期的人的年龄。
我想要一个40.69岁的精确年龄
答案 0 :(得分: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);
答案 1 :(得分:5)
这是一个近似计算:
TimeSpan span = DateTime.Today.Subtract(birthDate);
Console.WriteLine( "Age: " + (span.TotalDays / 365.25).toString() );
顺便说一句:请参阅Stack Overflow上的这个问题:How do I calculate someone’s age in C#?
答案 2 :(得分:1)
近似值是:
DateTime bd = new DateTime(1999, 1, 2);
TimeSpan age = DateTime.Now.Subtract(bd);
Console.WriteLine(age.TotalDays / 365.25);
答案 3 :(得分:1)
40年的部分很容易。但是为了获得真正准确的小数点,我不确定如何将其余的年龄转换为十进制数。您会看到年龄以年,月,日,小时,秒表示。而且计算并不那么容易。你必须处理周年纪念日。就像有人在1月31日出生一样,他们1个月大的时候?答案是3月1日。但在28天后的某些年份和29天后的某些年份。 Here是我尝试处理此问题的javascript实现。
但我想小数点可以表示自最近一次生日纪念日以来的天数除以下一个生日周年纪念日的天数。如果你想要更精确,你可以使用相同的原理在几秒钟内完成。
但我认为这是一个时代的不良代表。我们通常不会代表这样的年龄。
并确保您的日期时间与您的比较属于同一时区。
答案 4 :(得分:0)
你可以这样做:
Console.WriteLine(DateTime.Now.Date.Subtract(new DateTime(1980, 8, 1)).TotalDays / 365.25);
答案 5 :(得分:0)
小数部分允许多少错误?确切的年龄将是
31年,10天,3小时等,取决于所需的精度。