2013-03-30 70 views
1

在VB.net中,我一直在通過Murach的Visual Basic 2010進行學習。在學習如何處理時間和字符串時,我遇到了一個時間問題。在Visual Basic中遇到TimeSpan問題

我需要採取2個日期,並找到它們之間的天數。

所以我宣佈我的變量。

Dim currentDay As Date 
Dim futureDate As Date 
Dim timespan As TimeSpan = currentDay.Subtract(futureDate) 
Dim strMsgText As String 
Dim daysUntilDue = timespan.Days 

然後我設置格式CURRENTDAY和futureDate

currentDay = Convert.ToDateTime(Now) 
futureDate = Convert.ToDateTime(txtFutureDate.Text) 'input from user 

然後我把我需要顯示

strMsgText = "Current Date: " & currentDay.ToShortDateString() _ 
      & "Future Date: " & futureDate.ToShortDateString() _ 
      & "Days Util Due " & daysUntilDue 

數據接下來我提供的數據驗證

If IsDate(txtFutureDate.Text) Then 
    futureDate = CDate(txtFutureDate.Text) 
End If 

最後我顯示數據

MessageBox.Show(strMsgText) 

我得到的語法錯誤或沒有錯誤從VB IDE 然而,當計算日期,它給了我這個消息框中

前。

Current Date: 3/30/2013 

Future Date: 12/26/2013 

Days Until Due: 0 

我試圖翻轉日期在計算

前。而不是currentDay.Subtract(futureDate)我把它設置爲futureDate.Subtract(currentDay)只是爲了看看它是否會給我一個不同的結果。但是,唉,它仍然是0出來。

我知道我做錯了這是成果,但我不明白它是什麼與IDE /編譯器不給我任何錯誤和書不給我任何建議或知道如何讓這個工作正常。

回答

2

問題是,在您設置時間範圍值時currentDayfutureDate尚未初始化,並且具有DateTime的默認值。這些減法將始終爲0 TimeSpan

設置timespan你已經設置了這兩個日期。

Dim currentDay As Date 
Dim futureDate As Date 
Dim strMsgText As String 

currentDay = Convert.ToDateTime(Now) 
futureDate = Convert.ToDateTime(txtFutureDate.Text) 'input from user 

Dim timespan As TimeSpan = currentDay.Subtract(futureDate) 
Dim daysUntilDue = timespan.Days 
+0

alrighty謝謝。將代碼放入時間範圍內,並將daysUntilDue放入當前日期和futureDate中,並將futureDate分配給futureDate.Subtrace(currentDay)。 Kabam的工作很棒。知道它必須是一個邏輯錯誤我不是盒子裏最亮的蠟筆 – thewaytonever

+0

@thewaytonever - 沒問題。希望你明白你錯在哪裏,爲什麼這是答案。 – Oded

+0

@thewaytonever - 我們都是從某個地方開始的。在編程方面,事情並不明顯或不自然。 – Oded

0

當你需要檢查,如果用戶輸入一個有效的日期,你可以使用DateTime.TryParse確定:

Dim currentDay As Date = DateTime.Now 
Dim futureDate As Date 
Dim strMsgText As String 
Dim daysUntilDue As Integer 

currentDay = DateTime.Now 

Dim ci As New Globalization.CultureInfo("en-US") 

' check if a parseable date has been entered before doing the calculation 
If DateTime.TryParse(txtFutureDate.Text, ci, Globalization.DateTimeStyles.AllowWhiteSpaces, futureDate) Then 
    daysUntilDue = (futureDate - currentDay).Days 
    strMsgText = "Current Date: " & currentDay.ToShortDateString() & " Future Date: " & futureDate.ToShortDateString() & " Days Until Due " & daysUntilDue.ToString 
Else 
    strMsgText = "I could not understand the future date as entered." 
End If 

MessageBox.Show(strMsgText)