2017-05-04 65 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('-', ' ');