2016-04-03 55 views
1
年龄

的生日是我的数据库中的字符串,它是此格式年/月/日C#convering生日日期

我想根据计算的实时岁。例如,如果该人出生于(2015/5/1),他应该年龄为1岁,并且根据日期可以是1个月,1年,1天,7年等。

我的推杆此标记/ *,以显示我想要的年龄

这儿,这是我的代码转换,但不会有很大的帮助

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Web; 
    using System.Web.UI; 
    using System.Web.UI.WebControls; 
    using System.Data.SqlClient; 
    using System.Data; 
    using System.Configuration; 
    using System.Data.Odbc; 
    using System.Data.OleDb; 

    public partial class Reg : Page 
    { 
     protected void GO_Click(object sender, EventArgs e) 
     { 
      string myConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\db.mdb;Persist Security Info=True"; 
      OleDbConnection myConnection; 
      OleDbCommand cmd; 


      try 
      { 


       // Open OleDb Connection 
       myConnection = new OleDbConnection(); 
       myConnection.ConnectionString = myConnectionString; 
       myConnection.Open(); 

       // Execute Queries 
       cmd = myConnection.CreateCommand(); 

       //--------------------------- 
       int d = Convert.ToInt32(T7.Text); 
       int m = Convert.ToInt32(T6.Text); 
       int y = Convert.ToInt32(T5.Text); 
       string D = Convert.ToString(d); 
       string M = Convert.ToString(m); 
       string Y = Convert.ToString(y); 
       string n = T1.Text ,CID=T9.Text,FID=T8.Text; 
       string l = T2.Text; 
       string v = T4.Text,type= D1.SelectedItem.ToString(); 
       string age = Y + "/" + M + "/" + D; 


       //--------------------------- 

       cmd.CommandText = "SELECT count(*) FROM Visitor where CID ='" +CID + "' and FID ='" + FID + "'"; 


       int temp ; 
        temp = Convert.ToInt32(cmd.ExecuteScalar().ToString()); 
       Response.Write(temp); 


       if (temp == 1) 
       { 
        //getting the kid age 

        string kidAge= cmd.CommandText = "SELECT age FROME Visitor WHERE CID ='" + CID + "' and FID='" + FID + "' "; 

// here my problem trying to conver kidAge to his real age maybe it 10year or something  
       /* DateTime today = DateTime.Today; 

        int Age = today.Year - kidAge.Year; 

        if (bday > today.AddYears(-age)) 
         age--; 

        cmd.ExecuteNonQuery(); 

       */ 
    // get the right vassile for kid depending in age it may be for 1 year ..etc 
        string Vassl = cmd.CommandText = "SELECT * FROM [Activating inoculation] where IID='"+ kidAge + "'"; 
        cmd.ExecuteNonQuery(); 

        // get nearst date for vassile 
        string AppDate = cmd.CommandText = "SELECT * FROM VassileAppointments where IID"; 
        //updating 
        cmd.CommandText = "UPDATE Visitor SET Vphone ='" + v + "' where CID ='" + CID + "' and FID='" + FID + "' "; 
        cmd.ExecuteNonQuery(); 
        // appointment 
        DateTime ReqDate = DateTime.Today; 
        cmd.CommandText = "INSERT INTO [Visitor Appointment] Type ='" + type + "', ReqDate ='"+ReqDate+"' ,AppointmentDate='" + AppDate + "' VID='" + CID + "'"; 
        cmd.ExecuteNonQuery(); 
        Response.Write(" تم تسجيل الموعد"); 
       }  
        else 
        { 
        //works cmd INSERT cmd.CommandText = "INSERT INTO Visitor (FName,LName,age,Vphone) VALUES ('" + n + "','" + l + "','" + age + "','" + v + "')"; 

        cmd.CommandText = "INSERT INTO Visitor (FName,LName,age,Vphone) VALUES ('" + n + "','" + l + "','" + age + "','" + v + "')"; 
        cmd.ExecuteNonQuery(); 


        Response.Write("تم تسجيل الموعد والبيانات"); 


       } 
     } 

      catch (Exception ex) 
      { 
       Response.Write("OLEDB Connection FAILED: " + ex.Message); 
      } 
     } 


    } 
+0

使用参数。参见网页:https://msdn.microsoft.com/en-us/library/yy6y35y8(v=vs.110).aspx – jdweng

+0

这个问题,正如你指定的那样,并不像看起来那么微不足道。你如何定义你的年份,月份等?作为日历年/月?如果是这样,确定一个人多少年和几个月(以日历年为单位)并不是一项简单的任务:你需要考虑闰年,一个月中的日子等等:这也可能因使用的文化而异和/或日历。所以你真的需要非常清楚地指出这个问题:你想要的结果是什么?做一个样本输入和输出 – Jcl

回答

0

请尝试:

int Age = Convert.ToInt32(today.Year) - Convert.ToInt32(kidAge.Year); 

注那只会给年龄的年龄。

+0

如果今天是4月3日,并且例如12月12日的生日,则不会给出正确的结果。 – derpirscher

+0

是的,即使它年复一年,它也只会计算多年 –

+0

“今天”<<<是否有任何“使用系统参考?” –

1

尝试使用TimeSpan

TimeSpan age = (DateTime.Today).Subtract(new DateTime(kidAge.Year, kidAge.Month, kidAge.Day)); 

我认为这应该工作。

+1

打败我吧。是的,TimeSpan课程是要走的路。 – Wobbles

+0

哈哈欢呼队友 – AsafSavich

+0

不幸的是,时间跨度最大的单位是几天。所以为了在一个月或几年内获得年龄,你必须做额外的处理。 – derpirscher

1

为了准确年龄,使用方法:

public string ToAgeString(this DateTime dob) 
{ 
    DateTime dt = DateTime.Today; 

    int days = dt.Day - dob.Day; 
    if (days < 0) 
    { 
     dt = dt.AddMonths(-1); 
     days += DateTime.DaysInMonth(dt.Year, dt.Month); 
    } 

    int months = dt.Month - dob.Month; 
    if (months < 0) 
    { 
     dt = dt.AddYears(-1); 
     months += 12; 
    } 

    int years = dt.Year - dob.Year; 

    return string.Format("{0} year{1}, {2} month{3} and {4} day{5}", 
         years, (years == 1) ? "" : "s", 
         months, (months == 1) ? "" : "s", 
         days, (days == 1) ? "" : "s"); 
} 

这个函数会返回一个字符串,完整的年龄。只需设置你的字符串从这样的功能:

var age = ToAgeString(); 
1

首先:你不应该创建一个字符串连接您的疑问,因为这将导致SQL注入。改用参数化查询。其次,如果“生日查询”总是只给出一个结果,则可以使用返回单个对象的string birthdaystring = (string)cmd.ExecuteScalar()

将字符串转换为Date可以通过DateTime birthday = DateTime.Parse(birthdaystring)完成。您可能必须根据您的区域设置和数据库中日期的格式来定义FormatProvider。

然后计算年龄+月份+天的年龄是有点棘手。你可以看看Hugo Goncalves的回答。

根据您想要的准确度,您也可以通过除以两天之间的差异来计算两天的差异。但这可能会变得相当不准确。

TimeSpan age = DateTime.Now.Date - birthday; 
var totalmonths = age.TotalDays/30; // 
var years = totalmonths/12; 
var month = totalmonths % 12;