VB 2010:如何计算日期差异?

问题描述:

我想要做一个程序,它会返回你几岁,几年,几周,几周和几天。但我没有得到它比较不同的时间。VB 2010:如何计算日期差异?

输入是一个看起来像01.01.2011(dd.mm.yyyy)的字符串。

请有人帮忙吗?

非常感谢!

编辑:

到目前为止我的代码是这样的:

Try 
     dim date1 as string = '01.01.2011' 
     ' Today 
     Dim date2 As Date 
     date2 = Date.Now 
     ' number of seconds since date1 
     Dim seconds As Long 
     seconds = DateDiff("s", date1, date2) 
     lbl_seconds.Text = seconds.ToString & " Seconds" 
     ' Number of minutes since date1 
     Dim Minutes As Long 
     Minutes = DateDiff("n", date1, date2) 
     lbl_minutes.Text = Minutes.ToString & " Minutes" 
     ' Number of hours since date1 
     Dim hours As Long 
     hours = DateDiff("h", date1, date2) 
     lbl_hours.Text = hours.ToString & " Hours" 
     ' Days 
     Dim days As Long 
     days = DateDiff("d", date1, date2) 
     lbl_days.Text = days.ToString & " Days" 
     ' weeks 
     Dim weeks As Long 
     weeks = DateDiff("ww", date1, date2) 
     lbl_weeks.Text = weeks.ToString & " Weeks" 
     'months 
     Dim months As Long 
     months = DateDiff("m", date1, date2) 
     lbl_months.Text = months.ToString & " Months" 
     ' Years 
     Dim years As Long 
     years = DateDiff("yyyy", date1, date2) 
     lbl_years.Text = years.ToString & " Years" 


    Catch ex As Exception 
     date1 = "01.01.2011" 
     MsgBox("not a valid date given!") 
    End Try 
+0

让我们了解您到目前为止试过。 – 2011-05-31 16:37:09

+0

我发现DateDiff的年份始终是全年的值(因此2000年出生的所有人现在都是11岁),所以我不得不用几秒或几天来计算它 - 但是如何用闰年来计算? – 2011-05-31 16:53:18

则DateDiff是一个VB的功能,而不是标准的.NET库的一部分(所以C#不能使用它)。

使用TimeSpan类和toString() method with Custom TimeSpan Format String可以更容易地得到您想要的。

编辑:

下面的代码,你可以比较结果向http://www.easycalculation.com/date-day/age-calculator.php

Dim birthday As New DateTime(1990, 1, 1) 
Dim ts As TimeSpan = DateTime.Now.Subtract(birthday) 

Dim years As Integer, months As Integer, days As Integer, hours As Integer, minutes As Integer, seconds As Integer 

' compute difference in total months 
months = 12 * (DateTime.Now.Year - birthday.Year) + (DateTime.Now.Month - birthday.Month) 

' based upon the 'days', 
' adjust months & compute actual days difference 
If DateTime.Now.Day < birthday.Day Then 
    months -= 1 
    days = DateTime.DaysInMonth(birthday.Year, birthday.Month) - birthday.Day + DateTime.Now.Day 
Else 
    days = DateTime.Now.Day - birthday.Day 
End If 
' compute years & actual months 
years = Math.Floor(months/12) 
months -= years * 12 

hours = ts.Hours 
minutes = ts.Minutes 
seconds = ts.Seconds 
+0

该标准并不重要,我只是想正确计算它。 – 2011-05-31 17:39:09

+2

我可能将'DateTime.Now'存储在本地变量中,以便计算保持一致。虽然不太可能,但是在代码运行的时候,在12月31日午夜之后可能会有一秒钟过去,这将返回一个有趣的值,我想。所以在第3行你会有'DateTime.Now' = 2011/12/31 11:59。在第7行中,您可以使用'DateTime.Now' = 01/01/2012 12:00 a.m.这只是需要考虑的事情。 – Bobort 2011-06-01 15:48:36

+1

DateDiff是VisualBasic命名空间的一部分,C#提供了一个简单的参考添加。这正是你想要使用它的情况。 – jmoreno 2011-06-03 16:38:33