2013-08-22 141 views
0

如何在18岁以下的人显示错误消息?我用下面的代码,但它始终显示,年龄是无效的,即使我输入的日期早于1995年验证年龄未满18岁

DateTime dt = DateTime.Parse(dob_main.Text); 
DateTime dt_now = DateTime.Now; 

DateTime dt_18 = dt.AddYears(-18); 

if (dt.Date >= dt_18.Date) 
{ 
    MessageBox.Show("Invalid Birth Day"); 
} 
+0

'的DateTime dt_18 = dt.AddYears(-18); if(dt.Date> = dt_18.Date)' - 这总是如此。你需要'var age = DateTime.Now.Year - dt.Year;如果(年龄<18)...' –

回答

5
DateTime bday = DateTime.Parse(dob_main.Text); 
DateTime today = DateTime.Today; 
int age = today.Year - bday.Year; 
if(age < 18) 
{ 
    MessageBox.Show("Invalid Birth Day"); 
} 
7

你应该尝试沿着东西:

var age = GetAge(dt); 
if(age < 18) 
{ 
    MessageBox.Show("Invalid Birth Day"); 
} 

int GetAge(DateTime bornDate) 
{ 
    DateTime today = DateTime.Today; 
    int age = today.Year - bornDate.Year; 
    if (bornDate > today.AddYears(-age)) 
     age--; 

    return age; 
} 

Offtopic注意:考虑以这种方式命名变量,SO用户可以通过阅读它来猜测变量的意图。 dtdob_maindt_18远离好名字。

2
DateTime dt = DateTime.Parse(dob_main.Text); 
DateTime dt_now = DateTime.Now; 

DateTime dt_18 = dt.AddYears(18); //here add years, not subtract 

if (dt_18.Date >= dt_now.Date) //here you want to compare dt_now 
{ 
    MessageBox.Show("Invalid Birth Day"); 
} 
0

简单使用这种方式

DateTime BirthDate = DateTime.Parse(dob_main.Text); 
DateTime CurrentDate = DateTime.Today; 
int Age = CurrentDate.Year - BirthDate.Year; 
if(Age < 18) 
{ 
    MessageBox.Show("Invalid Birth Day"); 
}