【问题标题】:How to calculate age in years from dob in c# [duplicate]如何从c#中的dob计算年龄[重复]
【发布时间】:2013-01-23 20:04:06
【问题描述】:
   private void button1_Click(object sender, EventArgs e)
    {
        DateTime dob = new DateTime();
        textBox1.Text = dob.ToString();
        int age;
        age = Convert.ToInt32(textbox2.Text);
        age = DateTime.Now.Year - dob.Year;
        if (DateTime.Now.DayOfYear < dob.DayOfYear)
            age = age - 1;

    }

如何从 dob 计算年龄。这是我的 form1.cs。请有任何想法

【问题讨论】:

    标签: c# asp.net date


    【解决方案1】:

    [更新]:要考虑闰年,请使用 365.242 instead of 365。你应该很好till the year 2799 I believe

    DateTime 有一个运算符重载,当您使用减法运算符时,您会得到一个 TimeSpan 实例。

    所以你会这样做:

    DateTime dob = ..
    TimeSpan tm = DateTime.Now - dob;
    int years = ((tm.Days)/365);
    

    理想情况下,您的代码应如下所示:

    private void button1_Click(object sender, EventArgs e)
    {
        DateTime dob = //get this some somewhere..
        textBox1.Text = dob.ToString();
        TimeSpan tm = (DateTime.Now - dob);
        int age = (tm.Days/365) ;
    }
    

    TimeSpan 结构表示一个时间间隔,它具有DaysHoursSeconds 等属性,因此您可以根据需要使用它们。

    【讨论】:

    • TimeSpan 没有 Years 属性
    • @Habib 更新了答案。我不认为需要投票,我只是在充实它的同时给出了一个足以满足 OP 的答案。 ://
    • I just threw in an answer that was sufficient for the OP while I was fleshing it out - 不应该这样,你之前的回答甚至没有编译,这就是为什么不赞成,现在我已经删除了反对
    • 我认为一个错误的答案应该投反对票,现在如果他在你纠正你的错误后没有删除它,那将是不必要的。 (顺便说一句,一年没有365天,去问Fredric他多大了)
    • 大声笑@DilipanK,点击刷新此页面。
    【解决方案2】:

    您可以使用 TimeSpan 来计算它,例如:

    DateTime dob = .....
    DateTime Today = DateTime.Now;
    TimeSpan ts = Today - dob;
    DateTime Age = DateTime.MinValue + ts;
    
    
    // note: MinValue is 1/1/1 so we have to subtract...
    int Years = Age.Year - 1;
    int Months = Age.Month - 1;
    int Days = Age.Day - 1;
    

    来源:http://forums.asp.net/t/1289294.aspx/1

    【讨论】:

    • 在我的测试中,某些日期会产生不正确的结果:( 例如,尝试计算某人在 2017 年 1 月 12 日出生时的年龄,当时该人出生于 1996 年 1 月 13 日。上面的代码返回 21 岁而不是 20 岁,但他们的 21 岁生日应该是明天。
    【解决方案3】:
    DateTime today = DateTime.Today;
    
    int age = today.Year - bday.Year;
    
    if (bday > today.AddYears(-age))
     age--;
    

    【讨论】:

    • 这是唯一正确的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2019-02-13
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多