2013-07-20 153 views
3

是否有任何方法顯示2個不同時間之間的差異。我目前有2個按鈕。日期和時間差(分鐘)

Sub AddButtonClick(sender As Object, e As EventArgs) 

    StartTime.Text = DateTime.Now.ToString() 

End Sub 

這產生第一時間戳

Sub EndBreakClick(sender As Object, e As EventArgs) 

    EndTime.Text = DateTime.Now.ToString() 

    DateDiff(DateInterval.Minute, Endtime, StartTime) 
End Sub 

這產生第二時戳,但DATEDIFF行導致該應用,只要我按下按鈕崩潰。

回答

8

你可以依靠TimeSpan

Dim elapsedTime As TimeSpan = DateTime.Parse(EndTime.Text).Subtract(DateTime.Parse(StartTime.Text)) 

它表現爲一個正常的時間變量,從中可以提取所有你想要的信息。例如:

Dim elapsedMinutesText As String = elapsedTime.Minutes.ToString() 

記住,上面的代碼串取變量作爲輸入(從文本框文本),因爲它執行相應的轉換:Convert.ToDateTime

關於你的代碼,它是指EndTimeStartTime這些都不DateTime變量,但TextBoxes。你必須給他們(它們的文本)轉換爲DateTime,因爲我上面做的,那就是:

DateDiff(DateInterval.Minute, DateTime.Parse(EndTime.Text), DateTime.Parse(StartTime.Text)) 
+1

這將工作,但如果其中一個TextBox值不包含有效的DateTime,它將引發異常。您可能想要捕獲該異常,或者使用DateTime.TryParse來避免拋出異常。 –

+0

@DouglasBarbin好點,我已經更新了我的答案。我總是依賴Convert.ToDateTime,因爲我確信到達那裏的文本有適當的日期(否則計算將是錯誤的);但對於一般的目的,對於這個特定的OP,誰不太經驗VB.NET,我想這是一個更好的解決方案。 – varocarbas

+0

@DouglasBarbin只是爲了完全清楚這個問題:人們不能盲目地信任TryParse(或等價物),只要目標不是避免錯誤,而是進行適當的計算。當您將文本轉換爲日期時,您始終要確保在開始與日期相關的計算之前這是一個適當的日期。 – varocarbas

0

DateDiff功能會做到這一點。

label1.text = DateDiff("n", DateTime.Parse(EndTime.Text), DateTime.Parse(StartTime.Text)).ToString 

如果你的應用崩潰了,你檢查了你試圖傳遞給它的變量嗎?它看起來像你試圖通過textbox它而不是textbox.text

+0

就像我在其他答案中所評論的,我通常更喜歡TryParse over Parse,因爲不會拋出異常。它只是感覺「更清晰」,以處理解析失敗通過正常的代碼執行,而不是捕捉異常。 –

+0

我也是,我主要指出他們在參數中使用的明顯類型錯誤。在他們的例子中,解析會很好,因爲Date對象填充了它。 – OneFineDay

0
Sub EndBreakClick(sender As Object, e As EventArgs) 

    EndTime.Text = DateTime.Now.ToString() 

    Dim myStartTime As DateTime? = If(DateTime.TryParse(StartTime.Text, myStartTime), myStartTime, Nothing) 
    Dim myEndTime As DateTime? = If(DateTime.TryParse(EndTime.Text, myEndTime), myEndTime, Nothing) 
    If myStartTime.HasValue AndAlso myEndTime.HasValue Then 
     Dim someVariable As Long = DateDiff(DateInterval.Minute, myStartTime.Value, myEndTime.Value) 
     ' DO SOMETHING WITH THAT VARIABLE HERE 
    Else 
     ' One or both of the textbox values wasn't a valid DateTime. Display an error message or something 
    End If 
End Sub