2012-03-08 41 views
0

我想通过考虑他目前的年龄来计算出生年份,例如他的年龄是30岁,在datetimepicker框中,日期应显示为01/01/1982 。它应该是自动计算。我想通过考虑他目前的年龄来计算出生年份,

  int todayyears = int.Parse (DateTime.Now.Year.ToString()); 

     int a = int.Parse (int.Parse(txt_age.Text).ToString()); 

     string dif = (todayyears - a).ToString(); 

     txt_dob.Text = dif; 

这里txt_age的输入值给出,txt_dobtxt_age给出的输入之后自动diaplayed出生日期。

+1

为什么要将DateTime.Now.Year转换为字符串,然后再解析它? – 2012-03-08 09:37:05

+0

以及为什么要将txt_age.Text转换为int为字符串并再次转换为int? :) – arunes 2012-03-08 09:38:09

+0

你为什么要将int转换为字符串,然后回到int(变量“a”) – Doomsknight 2012-03-08 09:38:13

回答

6

它看起来像你正在转换的方式太多的东西字符串,没有理由。

如果总是要显示的1月1日,你只需要:

// Note: use int.TryParse to avoid exceptions if the user input isn't an integer 
int age = int.Parse(txt_age.Text); 

DateTime date = new DateTime(DateTime.Today.Year - age, 1, 1); 

txt_dob.Text = date.ToString(); // Or use a specific format 

注意,“出生日期”,在“txt_dob”是不恰当的,因为这不是用户的出生的日期,仅在1月1日的出生年份这是非常不同的。

+0

完美而简单! ! – V4Vendetta 2012-03-08 09:40:46

2

应该是这样的:

txt_dob.Text = DateTime.Now.AddYears(int.Parse(txt_age.Text) * -1).ToString("01/01/yyyy"); 
+0

OP要显示“01/01/THE_YEAR”。在你的例子中,它会显示“current_day/THE_YEAR”。 – ken2k 2012-03-08 09:42:31

+0

是的,我知道。固定 – Reniuz 2012-03-08 09:45:50

+0

@ V4Vendetta我会这样做,你这样做,这就是为什么人们不同:) – Reniuz 2012-03-08 09:59:42

1

试试这个

int todayyears = DateTime.Now.Year; 
      int a = int.Parse(txt_age.Text); 
      string dob = new DateTime(todayyears - a, DateTime.Today.Month, DateTime.Today.Day); 
txt_dob.Text=dob; 
0

事情是这样的:

int age; 
if(int.TryParse(txt_age.Text,out age)) 
{ 
    txt_dob.Text= new DateTime(DateTime.Now.Year-age,1,1).ToShortDateString(); 
} 
2

您可以创建与给定的年份日期时间。

因此计算一年。 (当年 - 年龄)。

int Age = 30; // obtain from your given field. 
int YofBirth = DateTime.Now.Year - Age; 

DateTime d = new DateTime(YofBirth , 1, 1); 

然后使用此Datetime d来设置字段。