从两个日期计算年龄 vb.net

Posted

技术标签:

【中文标题】从两个日期计算年龄 vb.net【英文标题】:Calculate age from two dates vb.net 【发布时间】:2016-07-14 17:36:34 【问题描述】:

我正在尝试根据日期计算年龄。这在服务器计算机上工作正常,但在报告错误“字符串07/21/2016 无法转换为日期”的特定客户端上不起作用。我发现服务器的语言环境设置为en-US,而有错误语言环境的客户端设置为en-UK。我尝试了下面的代码来使年龄计算成为可能,无论系统语言环境如何,但它没有奏效。

Dim var as string = "07/30/2010"
Dim dob As String = Format(CDate(var & " 01:00:00"), "dd-MM-yyyy hh:mm:ss")
Dim dob1 As Date = DateTime.ParseExact(dob, "dd-MM-yyyy hh:mm:ss", System.Globalization.CultureInfo.InvariantCulture)
Dim todayDate As String = Format(Date.Now, "dd-MM-yyyy hh:mm:ss")
Dim todayDate1 As Date = DateTime.ParseExact(todayDate, "dd-MM-yyyy hh:mm:ss", System.Globalization.CultureInfo.InvariantCulture)
lblDob.Text = var & " (" & DateDiff(DateInterval.Year, dob1, todayDate1) - 1 & " yrs)"

【问题讨论】:

日期从何而来?用户输入? 日期来自服务器输入的数据库,以上日期只是为了说明。 我假设(希望?)它们在数据库中存储为DateTime?为什么要打扰字符串呢? 如果它们以 DateTime 的形式存储在数据库中,为什么还要使用字符串呢? 他们当然可以,而且你在正确解析的轨道上,你只需要知道格式。不过,这个问题仍然有效 - 为什么要使用字符串呢? 【参考方案1】:

这就是我简化您的代码并使其工作的方式:

    Dim userBirthDateText = "07/30/2010"
    Dim userBirthDate = Date.ParseExact(userBirthDateText.Replace("/", "-"), "MM-dd-yyyy", Nothing)
    Dim currentDate = Date.Now
    Dim age = Math.Floor(currentDate.Subtract(userBirthDate).TotalDays / 365)

请注意,我将“/”替换为“-”以绕过日期中的“斜线问题”(此处记录:Why can't DateTime.ParseExact() parse "9/1/2009" using "M/d/yyyy")。

另外:我正在简化关于“如何获得以年为单位的时间跨度”的部分(我的简化:只需将其除以 365)。如果你想让它更准确,它需要更多的工作:Format A TimeSpan With Years。

【讨论】:

谢谢,完美运行,再次感谢您的链接。 使用Dim userBirthDate = New DateTime(2010, 7, 30)会更简单。【参考方案2】:

我在使用@XavierPena 方法时仍然遇到时间问题,但我使用的在所有情况下都有效的全面方法如下;

'date can be in any form and this method worked for either US or UK locale
'this method always solve the problem of date settings e.g 9/24/2016 or 09/24/2016
Dim age as string = "07/30/2010"
'age
    Try
        Dim birthDate = Date.ParseExact(age.replace("/", "-"), "MM-dd-yyyy", Nothing)
        Return (Math.Floor(Date.Now.Subtract(birthDate).TotalDays / 365) & " yrs")

    Catch ex As Exception
        Try
            Dim birthDate = Date.ParseExact(age.replace("/", "-"), "M-dd-yyyy", Nothing)
            Return (Math.Floor(Date.Now.Subtract(birthDate).TotalDays / 365) & " yrs")
        Catch ex2 As Exception
            Try
                Dim birthDate = Date.ParseExact(age.replace("/", "-"), "M-d-yyyy", Nothing)
                Return (Math.Floor(Date.Now.Subtract(birthDate).TotalDays / 365) & " yrs")
            Catch ex3 As Exception
                Try
                    Dim birthDate = Date.ParseExact(age.replace("/", "-"), "MM-d-yyyy", Nothing)
                    Return (Math.Floor(Date.Now.Subtract(birthDate).TotalDays / 365) & " yrs")
                Catch ex4 As Exception
                    Try
                        Dim birthDate = Date.ParseExact(age.replace("/", "-"), "dd-MM-yyyy", Nothing)
                        Return (Math.Floor(Date.Now.Subtract(birthDate).TotalDays / 365) & " yrs")
                    Catch ex5 As Exception
                        Try
                            Dim birthDate = Date.ParseExact(age.replace("/", "-"), "dd-M-yyyy", Nothing)
                            Return (Math.Floor(Date.Now.Subtract(birthDate).TotalDays / 365) & " yrs")
                        Catch ex6 As Exception
                            Try
                                Dim birthDate = Date.ParseExact(age.replace("/", "-"), "d-M-yyyy", Nothing)
                                Return (Math.Floor(Date.Now.Subtract(birthDate).TotalDays / 365) & " yrs")
                            Catch ex7 As Exception
                                Dim birthDate = Date.ParseExact(age.replace("/", "-"), "d-MM-yyyy", Nothing)
                                Return (Math.Floor(Date.Now.Subtract(birthDate).TotalDays / 365) & " yrs")
                            End Try
                        End Try

                    End Try
                End Try
            End Try
        End Try

    End Try

【讨论】:

【参考方案3】:

我使用此代码,它对我有用。

Dim DoB as DateTime=dateTimePickerDoB.value.toshortdatestring
Dim DtNow as DateTime=Now.ToshortDatestring
Dim Age as Integer=Datediff(DateInterval.Year,DoB,DtNow)
txtage.text=age

【讨论】:

以上是关于从两个日期计算年龄 vb.net的主要内容,如果未能解决你的问题,请参考以下文章

如何在java中计算两个日期之间的年龄或差异

将 VB.NET 项目移动到新计算机后日期无法正常工作[关闭]

算农历出生日期计算器,根据出生日期怎么算年龄?

出生日期,根据出生日期怎么算年龄?

如何让我的代码从出生日期计算年龄?

从出生日期计算年龄