C# 年龄(以年为单位),小数精度为datetime
在C#datetime中,我如何根据出生日期获得某人的年龄C# 年龄(以年为单位),小数精度为datetime,c#,datetime,C#,Datetime,在C#datetime中,我如何根据出生日期获得某人的年龄 我想要一个精确的年龄,比如40.69岁,这是一个近似的计算: TimeSpan span = DateTime.Today.Subtract(birthDate); Console.WriteLine( "Age: " + (span.TotalDays / 365.25).toString() ); 顺便说一句:另请参见有关堆栈溢出的问题:近似值为: DateTime bd = new DateTime(1999
我想要一个精确的年龄,比如40.69岁,这是一个近似的计算:
TimeSpan span = DateTime.Today.Subtract(birthDate);
Console.WriteLine( "Age: " + (span.TotalDays / 365.25).toString() );
顺便说一句:另请参见有关堆栈溢出的问题:近似值为:
DateTime bd = new DateTime(1999, 1, 2);
TimeSpan age = DateTime.Now.Subtract(bd);
Console.WriteLine(age.TotalDays / 365.25);
您可以这样做:
Console.WriteLine(DateTime.Now.Date.Subtract(new DateTime(1980, 8, 1)).TotalDays / 365.25);
小数部分允许有多少误差?确切的年龄是多少
31年、10天、3小时等,取决于所需的精度。40年的部分很简单。但要得到一个真正准确的小数点,我不知道如何将这个年龄的其余部分转换成十进制数字。你看,年龄是以年、月、日、小时、秒来表示的。而且计算也不是那么容易。你必须处理周年纪念日。比如,如果有人出生在1月31日,他们什么时候才1个月大?答案是3月1日。但有些年份是28天后,有些年份是29天后。是我尝试处理这个问题的javascript实现 但我想小数点可以表示最近一个生日纪念日之后的天数除以下一个生日纪念日之前的天数。如果你想更精确,你可以用同样的原理在几秒钟内完成 但我认为这是对一个时代的拙劣表现。我们通常不代表这样一个时代
并确保您的日期时间在同一时区进行比较。这将计算出确切的年龄。年龄的小数部分是相对于上一个生日和下一个生日之间的天数计算的,因此它将正确处理闰年 分数部分是一年中的线性部分(不考虑月的不同长度),如果你想表示分数年龄,这似乎最有意义
// 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);
25表示闰年。你可以使用“span.TotalDays”来近似每个人都建议的更好的未来。减法()?我更喜欢“DateTime.Today-birthDate:)在“获取下一个生日”一行中,AddYears不能正确处理闰年的年龄问题。假设你的生日是2008年2月29日。如果你加1年,它会给你2008-02-28而不是2008-03-01。应该是:如果你加1年,它会给你2009-02-28而不是2009-03-01。我想这取决于你是将2008-02-29视为2008-02-28之后的一天还是2008-03-01之前的一天。。。我同意这两种说法显然都不正确。如果您对“相反”方向感兴趣(将小数年转换为天数/日期),请参阅:。