C#时间减法问题

时间:2017-05-04 20:03:35

标签: c# datetime

我一直在C#中面临时间减法问题。

例如我在 4/5/2017 11:56:27 PM 启动计时器,并在 5/5/2017 12:10:27 AM结束计时器当我减去它时,它显示结果 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();

2 个答案:

答案 0 :(得分:3)

您似乎展示了很多难以为我们重现的代码,变量名称并不是最清晰的。我假设dt代表“datetime”,而edt代表“end datetime”。如果这是正确的,那么你将从开始日期减去结束日期而不是相反(你应该从较大的那个中减去较小的那个)。

所以,这里是如何区分开始和结束(我正在使用印地文化信息):

    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

答案 1 :(得分:0)

看起来您可能有复制/粘贴错误。在这一行中,您的意思是引用dt1而不是dt吗?

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