Vb.net 根据给定的出生日期计算年龄

Vb.net 根据给定的出生日期计算年龄,vb.net,time,string-formatting,Vb.net,Time,String Formatting,我有两个组合框和两个文本框。我的第一个组合框包含一月、二月等格式的月份,另一个组合框包含从1到31的数字。我的第一个文本框是txtwear。一旦用户向txtyear输入出生年份,变量BOD将等于此值 Dim BOD as string BOD = cbomonth.text + "-" + cboday.text + "-" + txtyear.text 我最后一个文本框的目的是处理当光标在txtyear上失去焦点时将计算的用户年龄 任何人都可以帮助计算年龄。这里有一个稍微不同的方法,使用Da

我有两个组合框和两个文本框。我的第一个组合框包含一月、二月等格式的月份,另一个组合框包含从1到31的数字。我的第一个文本框是
txtwear
。一旦用户向
txtyear
输入出生年份,变量
BOD
将等于此值

Dim BOD as string
BOD = cbomonth.text + "-" + cboday.text + "-" + txtyear.text
我最后一个文本框的目的是处理当光标在
txtyear
上失去焦点时将计算的用户年龄


任何人都可以帮助计算年龄。

这里有一个稍微不同的方法,使用Date类的年和月属性:

Dim BOD as string
BOD = cbomonth.text + "-" + cboday.text + "-" + txtyear.text

Dim dt As Date
If Date.TryParseExact(BOD, "MMMM-dd-yyyy", Nothing, Globalization.DateTimeStyles.None, dt) Then
    Dim Age As New Date(Now.Subtract(dt).Ticks)
    MsgBox(String.Format("Your age is : {0} Years and {1} Months", Age.Year - 1, Age.Month - 1))

Else
    MsgBox("Birth Date is in wrong format")
End If
使用此功能

Function String2Date(ByVal sDay As String, ByVal sMonth as String, ByVal sYear as String) As Date
   StdDateString = sMonth & " " & sDay & ", " & sYear
End Function
并应用它

Dim dt1 as Date = String2Date(ComboBox2.Text,ComboBox1.Text,txtYear.Text).ToShortDateString
Dim dt2 as Date = Now.ToShortDateString
Dim dt3 as TimeSpan = (dt2 - dt1)
Dim diff as Double = dt3.Days
Dim sAge as String

sAge = Str(Int(diff / 365)) & " Year "
diff = diff Mod 365
sAge = sAge & Str(Int(diff / 30)) & " Month(s)"
diff = diff Mod 30
sAge = sAge & Str(diff) & " Day(s)"

txtAge.Text = sAge

这里有两个问题:

  • 如何将字符串输入转换为
    DateTime
    对象
  • 一旦数据格式正确,如何计算年龄
  • 我将让您按照其他人的说明来使用
    TryParseExtract
    ,这绝对是正确的方法

    根据出生日期确定某人的年龄时,请尝试使用以下方法:

    公共函数GetCurrentAge(ByVal dob As Date)为整数
    作为整数的年龄
    年龄=今天.年-出生年份
    如果(dob>Today.AddYears(-age))则age-=1
    回归年龄
    端函数
    
    这是杰夫·阿特伍德(Jeff Atwood)非常受欢迎的问题的最佳答案的vb版本


    我也写了一篇关于的博客。

    这里有一个使用Visual Studio 2012的技巧 VB.NET语言

    Private Sub dtpBOfD_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dtpBOfD.ValueChanged
    
            lblAge.Text = Age(dtpBOfD.Value)
    
        End Sub
    
        Public Shared Function Age(DOfB As Object) As String
            If (Month(Date.Today) * 100) + Date.Today.Day >= (Month(DOfB) * 100) + DOfB.Day Then
                Return DateDiff(DateInterval.Year, DOfB, Date.Today)
            Else
                Return DateDiff(DateInterval.Year, DOfB, Date.Today) - 1
            End If
        End Function
    
    日期为d1

    日期为d2

    d1=格式(dob.Value,“yyyy/MM/dd”

    d2=格式(System.DateTime.Now,“yyyy/MM/dd”)


    d=DateDiff(DateInterval.Year,d1,d2)'d-1提供准确的年龄

    要获得完整的年龄信息,请在c#中使用此代码`

    公共字符串calculateDays(整数天、整数月、整数年)
    {           
    国际年;
    每月一次;
    国际日;
    int cuYear=DateTime.Now.Year;
    int cuMonth=DateTime.Now.Month;
    int cuDay=DateTime.Now.Day;
    弦年龄;
    Diffyear=cuYear;
    DiffMonth=第个月;
    DiffDay=cuDay;
    如果((月差)<0)
    {
    年份-=1;
    }
    如果((DiffDay)<0)
    {
    月份-=1;
    如果((月数-1)<8)
    {
    如果(((月-1)%2)==0)
    {
    如果((月数-1)=2)
    如果(第%4年==0)
    {
    DiffDay=29+DiffDay;
    }
    其他的
    {
    DiffDay=28+DiffDay;
    }
    其他的
    DiffDay=30+DiffDay;
    }
    其他的
    DiffDay=31+DiffDay;
    }
    其他的
    {
    如果(((月-1)%2)==0)
    {
    DiffDay=31+DiffDay;
    }
    其他的
    {
    DiffDay=30+DiffDay;
    }
    }
    }
    如果((月差)<0)
    {
    DiffMonth=DiffMonth+12;
    }
    如果(年<0)
    {
    Diffyear=Diffyear*(-1);
    }
    如果((DiffDay)<0)
    {
    DiffDay=DiffDay*(-1);
    }
    Age=“Age:”+Diffyear.ToString()+“year”、+DiffMonth.ToString()+“months”、+DiffDay.ToString()+“days”;
    回归年龄;
    }
    

    `

    这是SO的第一个问题之一。请先努力搜索问题。对不起,先生。我是编程新手。我搜索过,但我不懂大部分代码。然后你问的问题不是很聪明。你可能会得到更多你不懂的答案。这很有意义当然可以。一定要提到已经找到了这些答案,并解释你对它们不了解的地方。张贴你尝试过的代码,并说明为什么它没有达到你希望的效果。谢谢先生告诉我。我会记住这一点,并确保在问问题之前做到这一点。事实上,汉斯,因为问题9是为你准备的C#,这是对VB来说的,这不是完全相同的问题。也就是说,这个问题仍然可以用更好的方式提出。这假设一年中有365天(每四分之一有366个失败(365.25可能大部分时间都有效)),这假设每个月有30天(2月有28天(或29天),并且有多个月31次失败(30.45在大多数情况下已经足够接近了))。下面的答案在这方面要好得多。虽然此代码片段可能会解决此问题,但确实有助于提高您的文章质量。请记住,您将在将来为读者回答此问题,而这些人可能不知道您的代码建议的原因。此代码旨在获得格式化时代的确切年龄年-月-日示例:-22岁4个月4天。对于1994年7月7日出生的人来说,该代码测试良好,适用于所有日期,包括闰年。
    public string calculateDays(int day, int Month, int year)
        {           
           int Diffyear;
           int DiffMonth;
           int DiffDay;
           int cuYear=DateTime.Now.Year;
           int cuMonth=DateTime.Now.Month;
           int cuDay=DateTime.Now.Day;
           string Age;
            Diffyear= cuYear-year;
            DiffMonth=cuMonth-Month;
            DiffDay=cuDay-day;
            if ((DiffMonth) < 0)
        {
            Diffyear -= 1;
        }
            if ((DiffDay) < 0)
            {
                DiffMonth -= 1;
                if ((cuMonth - 1) < 8)
                {
                    if (((cuMonth - 1) % 2) == 0)
                    {
                        if ((cuMonth - 1) == 2)
                            if (cuYear % 4 == 0)
                            {
                                DiffDay = 29 + DiffDay;
                            }
                            else
                            {
                                DiffDay = 28 + DiffDay;
                            }
                        else
                            DiffDay = 30 + DiffDay;
                    }
    
    
                    else
    
                        DiffDay = 31 + DiffDay;
                }
                else
                {
                    if (((cuMonth - 1) % 2) == 0)
                    {
                        DiffDay = 31 + DiffDay;
                    }
                    else
                    {
                        DiffDay = 30 + DiffDay;
                    }
                }
            }
            if ((DiffMonth) < 0)
            {
                DiffMonth = DiffMonth+12;
            }
            if (Diffyear < 0)
            {
                Diffyear = Diffyear * (-1);
            }
            if ((DiffDay) < 0)
            {
                DiffDay = DiffDay * (-1);
            }
    
           Age = "Age: " + Diffyear.ToString() + " year, " + DiffMonth.ToString() + " months, " + DiffDay.ToString() + " days";
            return Age;
        }