我想在使用 c# 的 C# windows 表單應用程式中使用日期時間選擇器找到輸入的開始時間和結束時間之間的區別。輸出應以小時為單位。
uj5u.com熱心網友回復:
獲取兩個 DateTimePickers 并相應地命名它們。然后轉到屬性視窗并將其格式更改為“時間”。下面的代碼是用于觸發計算并在文本框中顯示輸出的按鈕。
private void btnClickMe_Click(object sender, EventArgs e)
{
TimeSpan diff = dtpEndTime.Value - dtpStartTime.Value;
int hours = diff.Hours 1;
txtShowOutput.Text = Convert.ToString(hours);
}
uj5u.com熱心網友回復:
接受的答案是錯誤的。不僅沒有人指出這一點,而且更糟糕的是(或者更可笑;取決于一個人的幽默感)答案已被接受并收到三個現在“僅”兩個贊成票。但是,嘿,這是公認的答案,所以它一定是有用的,你可能會問。不,我說,絕對不是。
讓我們假設兩個 DateTimePickers 都包含相同的日期,dtpStartTime 的時間是01:00:00(正好是凌晨 1 點),dtpEndTime的時間是 07:00:00(早餐時間)。這兩個時間也都落在整秒上,所以對于這個例子,我們不必關心幾分之一秒。
那么,01:00:00 和 07:00:00 之間的時差是多少(兩者都是同一天的時間)?正好是六個小時。然而,顯然,已接受答案中的代碼產生了 7 小時的不正確時差。那么,為什么這個答案被接受了呢?我只能猜測提問者更喜歡得到有時不正確的結果,而不是總是得到正確的結果。
為了給出更有意義的答案,首先需要決定如何處理不是整小時的時差,例如 01:15:00 和 03:07:47 之間的時差。這個問題沒有給出明確的方向,所以我填補空白并在這里定義我自己的規則:如果時間差的小數部分以小時為單位 >= 30 分鐘,則時間差應四舍五入到下一個較大的整小時, 否則時差應向下舍入到下一個較小的小時。這基本上轉化為:
TimeSpan diff = dtpEndTime.Value - dtpStartTime.Value;
int hours = (int) (Math.Abs(diff.TotalHours) 0.5d);
請注意,這是使用浮點運算,浮點運算固有的不精確性也適用于此處。另請注意,通過將結果值轉換為int,此代碼可以處理的最大時間差(以小時為單位)相當于大約 245000 年,給予或接受。我希望這不是問題...
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/486744.html
上一篇:CsvHelper寫入空字串而不是默認的DateTime
下一篇:如何正確讀取“字串”Unity?
