Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 年龄计算_C#_.net_Datetime - Fatal编程技术网

C# 年龄计算

C# 年龄计算,c#,.net,datetime,C#,.net,Datetime,可能重复: 我正在尝试创建一个表单,其中输入客户的出生日期,并在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.Ev

可能重复:

我正在尝试创建一个表单,其中输入客户的出生日期,并在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”


在几天内尝试以下年龄:

txtAgeInDays.Text = (DateTime.Now - dob).ToString ("dddddd");

请参见

您需要导入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();
}
private void dtpDOB_Leave(对象发送方,System.EventArgs e){
System.DateTime dob=默认值(System.DateTime);
dob=dtpDob.Value.Date;
int age=-1;
DateTime today=DateTime.today;

而(dob将此作为扩展方法也将是一种很好的方法:)这并不能解释闰年,所以当生日接近今天时,它会显示错误的年龄。@Guffa true,补充了这一部分。尽管如此,这个问题还是应该结束,因为重复性更好,但它仍然是一个近似值,在某些情况下会显示错误的年龄(是的,我已经测试过这个).@Guffa yaeh我知道。我自己测试了一下。但我不想在一个问题上花太多时间,因为答案已经很清楚了
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();
}