我一直在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();
答案 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
。
输出如下:
答案 1 :(得分:0)
看起来您可能有复制/粘贴错误。在这一行中,您的意思是引用dt1
而不是dt
吗?
var res1 = dt.Subtract(edt1).ToString().Replace('-', ' ');