2017-05-04 76 views
-2

我一直在面對C#中的時間減法問題。C#時間減法問題

比如我在2017年4月5日下午11時56分27秒啓動定時器和結束2017年5月5日上午12時10分27秒計時器時,我減去該它顯示我造成23小時

我希望它顯示14分鐘的確切時間。我也在分享我的代碼。

double rate1 = Convert.ToDouble(rate.Text); 
double value = rate1/3600; 
DateTime dt = DateTime.Parse(text3.Text); 
DateTime edt = DateTime.Parse(text5.Text); 
var res = dt.Subtract(edt).ToString().Replace('-', ' '); 
DateTime tt = Convert.ToDateTime(res); 
DateTime dt1 = DateTime.Parse(text4.Text); 
DateTime edt1 = DateTime.Parse(text6.Text); 
var res1 = dt.Subtract(edt1).ToString().Replace('-', ' '); 
double sec = TimeSpan.Parse(res).TotalSeconds; 
double sec1 = TimeSpan.Parse(res1).TotalSeconds; 
text7.Text = res.ToString(); 
text8.Text = res1.ToString(); 
+3

這是倒退,你減去從開始時間結束時間。然後通過添加代碼來擺脫減號來忽略該錯誤。開始正確地做到這一點,以獲得某處。 –

+0

你想要的確切輸出是什麼?根本不清楚 –

+0

檢查日期格式。它是'MM/DD/YYYY'。你的日期在不同的月份,所以你得到的答案是正確的。 – FortyTwo

回答

3

看起來你似乎顯示了很多代碼難以再現,而且變量名稱並不是最清晰的。我假設dt代表「datetime」,edt代表「結束日期時間」。如果這是正確的,那麼你從開始日期減去結束日期而不是反過來(你應該從較大的減去較小的)。

所以,這裏是如何獲取的開始和結束之間的差別(我使用的是印地文文化信息本):

var dateFormatCulture = new CultureInfo("hi-IN"); 
    var startDate = DateTime.Parse("4/5/2017 11:56:27 PM", dateFormatCulture); 
    var endDate = DateTime.Parse("5/5/2017 12:10:27 AM", dateFormatCulture); 
    var difference = endDate.Subtract(startDate); 

你說你要「像14分鐘確切的時間」。我不確定這是否意味着您不想顯示其餘的值,但以下幾種方法可以顯示它們。

Console.WriteLine($"General short string format: {difference:g}"); 

Console.WriteLine(
    "Custom string format: {0} days, {1} hours, {2} minutes, {3} seconds", 
    difference.Days, difference.Hours, difference.Minutes, difference.Seconds); 

Console.WriteLine("In terms of minutes, the total minutes difference is: {0}", 
    difference.TotalMinutes); 

請注意,用於顯示分鐘的方法的第二個和第三個示例之間存在差異。 Minutes將只顯示差異的分鐘部分。 TotalMinutes將以分鐘顯示整個差異。在你的情況下,他們是相同的,但如果差異是1小時14分鐘,Minutes仍然是14,但TotalMinutes將是74

輸出看起來像:

enter image description here

+0

我認爲問題的一部分是我們使用的是en-US語言環境,他可能會使用不同的東西,所以目前還不清楚他在找什麼 –

+0

謝謝@JoePhillips。更新了印度文化信息,這是'dd/mm/yyyy' –

+0

這看起來好多了,與他現在要求的相符:) –

0

看起來您可能有複製/粘貼錯誤。在這一行中,您的意思是參考dt1而不是dt

var res1 = dt.Subtract(edt1).ToString().Replace('-', ' ');