2011-05-31 166 views
2

我想要做一個程序,它會返回你幾歲,幾年,幾周,幾周和幾天。但我沒有得到它比較不同的時間。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

回答

6

則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