年龄计算
问题描述:
我想创造一个输入出生客户的日期的格式,并在txtAge自动显示他的年龄:
private void Form3_Load(object sender, EventArgs e)
{
dtpDob.Value = DateTime.Today.Date;
SqlConnection conn = new SqlConnection();
}
private void dtpDOB_Leave(object sender, System.EventArgs e)
{
System.DateTime dob = default(System.DateTime);
dob = dtpDob.Value.Date;
txtAge.Text = DateTime.DateDiff(DateInterval.Year, dob, DateTime.Today.Date);
}
但是我得到这些错误:
'System.DateTime'不包含'DateDiff'的定义。
名称'DateInterval'在当前上下文中不存在。
答
public static int GetAge(DateTime birthDate)
{
return (int)Math.Floor((DateTime.Now - birthDate).TotalDays/365.242199);
}
答
在天尝试一下本作的时代:
txtAgeInDays.Text = (DateTime.Now - dob).ToString ("dddddd");
看到http://msdn.microsoft.com/en-us/library/system.timespan.tostring.aspx
答
你会需要导入VB库使用DateDiff
,并且它不是DateTime
结构的一部分。
尽管使用DateDiff
不能正确计算年龄,它只会给出日期年份之间的差异,而不是年份之间的差异。
一个简单的方法来计算年龄是一年,直到你通过今天的日期,以提高出生日期:
private void dtpDOB_Leave(object sender, System.EventArgs e) {
System.DateTime dob = default(System.DateTime);
dob = dtpDob.Value.Date;
int age = -1;
DateTime today = DateTime.Today;
while (dob <= today) {
age++;
dob = dob.AddYears(1);
}
txtAge.Text = age.ToString();
}
注:此计算需要闰年考虑在内,所以你会得到实际年龄,而不是近似值。
这样做的扩展方法将是一个很好的方式来做到这一点:) – stack72
这不占闰年,所以它会显示错误的年龄,当生日接近今天的日期。 – Guffa
@Guffa是真的,补充说明一部分。尽管如此,这个问题应该由于重复而被关闭 –