2012-08-02 44 views
1

我在嘗試在特定情況下減少hr1與hr1時遇到問題,例如,當hr1 = 13:00hr2 = 15:00,ok,結果爲02:00。 但是,當值爲:hr1 = 22:00hr2 = 02:00時,結果爲20:00。 結果應該是04:00c# - 二次抽取返回負值

TimeSpan ts1 = hr1.Subtract(hr2).Duration(); 
TextBox1.Text = ts1.ToString(); 

我該如何解決這個問題?

回答

2

我明白你想要什麼,但你目前如何去實現它是沒有意義的。 22小時減20小時是2小時,這是正確的。

你可能想這樣的:

new DateTime(1, 1, 2, 2, 0, 0) - new DateTime(1, 1, 1, 22, 0, 0) 

你不想減去時間跨度的,要減去日期(假日期在這種情況下)。

+1

謝謝你的傢伙!我會努力的。 – 2012-08-02 17:28:23

1

調用Duration()將始終導致正數TimeSpan。這個問題來自於你在計算中丟棄了幾天。 22:00-02:00 is 20:00。我相信你預計它會是04:00,因爲02:00代表「明天」。如果這是你想要的,你將需要計算22:00-(02:00 + 24:00),這會給你-04:00,當你調用Duration()時,這將變爲04:00。

+0

完美!非常感謝! – 2012-08-02 17:26:55

0

您正試圖減去兩個「跨度」或持續時間 - 不是固定時間點。你的代碼目前所說的是,我想從二十小時減去兩小時(實際上是二十小時)。相反,您需要使用DateTime s。困難的部分將決定你的時間跨度的日期。我會重寫代碼以使用DateTime s,並保留實際嘗試計算的「時間」。

編輯:從TimeSpan轉換爲DateTime可能導致你失去了影響結果的結果信息:

var ts1 = new DateTime (1, 1, 1, hr1.Hours, hr1.Minutes, hr1.Seconds, hr1.Milliseconds) - 
      new DateTime (1, 1, 2, hr2.Hours, hr2.Minutes, hr2.Seconds, hr2.Milliseconds); 

或:

var ts1 = new DateTime (1, 1, 1, hr1.Hours, hr1.Minutes, hr1.Seconds, hr1.Milliseconds) - 
      new DateTime (1, 1, 1, hr2.Hours, hr2.Minutes, hr2.Seconds, hr2.Milliseconds); 

比是不同的

var ts1 = new DateTime (1, 1, 2, hr1.Hours, hr1.Minutes, hr1.Seconds, hr1.Milliseconds) - 
      new DateTime (1, 1, 1, hr2.Hours, hr2.Minutes, hr2.Seconds, hr2.Milliseconds); 

這就是爲什麼你需要保持「時間點」與DateTime