我在嘗試在特定情況下減少hr1與hr1時遇到問題,例如,當hr1 = 13:00
和hr2 = 15:00
,ok,結果爲02:00
。 但是,當值爲:hr1 = 22:00
和hr2 = 02:00
時,結果爲20:00
。 結果應該是04:00
。c# - 二次抽取返回負值
TimeSpan ts1 = hr1.Subtract(hr2).Duration();
TextBox1.Text = ts1.ToString();
我該如何解決這個問題?
我在嘗試在特定情況下減少hr1與hr1時遇到問題,例如,當hr1 = 13:00
和hr2 = 15:00
,ok,結果爲02:00
。 但是,當值爲:hr1 = 22:00
和hr2 = 02:00
時,結果爲20:00
。 結果應該是04:00
。c# - 二次抽取返回負值
TimeSpan ts1 = hr1.Subtract(hr2).Duration();
TextBox1.Text = ts1.ToString();
我該如何解決這個問題?
我明白你想要什麼,但你目前如何去實現它是沒有意義的。 22小時減20小時是2小時,這是正確的。
你可能想這樣的:
new DateTime(1, 1, 2, 2, 0, 0) - new DateTime(1, 1, 1, 22, 0, 0)
你不想減去時間跨度的,要減去日期(假日期在這種情況下)。
調用Duration()
將始終導致正數TimeSpan
。這個問題來自於你在計算中丟棄了幾天。 22:00-02:00 is 20:00。我相信你預計它會是04:00,因爲02:00代表「明天」。如果這是你想要的,你將需要計算22:00-(02:00 + 24:00),這會給你-04:00,當你調用Duration()
時,這將變爲04:00。
完美!非常感謝! – 2012-08-02 17:26:55
您正試圖減去兩個「跨度」或持續時間 - 不是固定時間點。你的代碼目前所說的是,我想從二十小時減去兩小時(實際上是二十小時)。相反,您需要使用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
。
謝謝你的傢伙!我會努力的。 – 2012-08-02 17:28:23