2014-02-17 95 views
1

我想計算在VB.NET中創建一個剩餘時間的計算器,它不會讓我和我似乎無法弄清楚爲什麼。這裏是我的代碼TimeSpan不計算

Dim PrefendinedDateTime As DateTime = "3:00:00" 
    Dim TimeNow As DateTime = DateTime.Now 
    Dim ElapsedTime As TimeSpan = (TimeNow - frmStartDateTime) 

    Dim TimeRemaining As TimeSpan = PrefendinedDateTime - New DateTime(ElapsedTime.Ticks) 

    txtTimeRemaining.Text = New DateTime(TimeRemaining.Ticks).ToString("HH:mm:ss") 

我收到此錯誤信息:

蜱必須DateTime.MinValue.Ticks和DateTime.MaxValue.Ticks之間。 參數名:蜱

不太清楚這是什麼意思

回答

1

你不能施放時間跨度爲一個日期,因爲這些都是不同的蜱。你需要的是這樣的:

txtTimeRemaining.Text = TimeRemaining.ToString("g") 

或本:

txtTimeRemaining.Text = TimeRemaining.ToString("hh\:mm\:ss") 

注意格式字符串是如何成爲時間跨度不同,相對於格式化的日期時間,例如,和:現在需要逃跑。這在以下鏈接#2中詳細解釋。

參考文獻:

讓我們在此停留一秒鐘,而我試圖解釋爲什麼它不爲你工作。忘掉滴答聲,在幾秒鐘內想,因爲這是一個可測量的時間間隔,很容易掌握。假設你的時間間隔是一秒鐘。現在您正在嘗試創建一個日期,並在其中傳遞一秒鐘。你期望得到什麼? 1秒,即第1年,第1個月等?很公平。

現在假設你有一個-1秒的間隔(是的,間隔可以是負數)。你會認爲這是公元前一秒,對吧?不幸的是,.NET中的負面日期是不允許的。

作爲一般經驗法則,時間間隔(用.NET表示爲TimeSpan)和時間點(用DateTime表示)應該分開處理,因爲它們在邏輯上是不同的實體。儘管有單向關係,即兩個日期可以代表TimeSpan。但是,TimeSpan並不代表兩個日期。事實上,無論您擁有多少個TimeSpans,您都無法將它們與任何時間點相關聯。

+0

這不起作用,它返回: 輸入字符串的格式不正確。 @Neolisk – user2177940

+0

我可以理解,但是我不知道如何去解決這個問題。 – user2177940

+0

@ user2177940:現在試試'TimeRemaining.ToString(「g」)'。我會看看它是否支持自定義格式。 – Neolisk