C# 计算2个日期时间之间的差异时获取错误的计时

C# 计算2个日期时间之间的差异时获取错误的计时,c#,C#,我试图计算2个datetime之间的时间差,但得到的时间不正确 我有两个约会时间,如下所示: DateTime end = new DateTime(2018, 04, 13, 12, 17, 39, 067); DateTime start = new DateTime(2018, 04, 13, 12, 17, 38, 893); string s = string.Format("{0:%m} : {0:%s}", (end - start)); // 0:0 00:01 我应

我试图计算2个datetime之间的时间差,但得到的时间不正确

我有两个约会时间,如下所示:

 DateTime end = new DateTime(2018, 04, 13, 12, 17, 39, 067);
 DateTime start = new DateTime(2018, 04, 13, 12, 17, 38, 893);
 string s = string.Format("{0:%m} : {0:%s}", (end - start)); // 0:0
00:01 
我应该得到1秒,但是得到
0分零秒

此外,我还希望有2位数字输出,如下所示:

 DateTime end = new DateTime(2018, 04, 13, 12, 17, 39, 067);
 DateTime start = new DateTime(2018, 04, 13, 12, 17, 38, 893);
 string s = string.Format("{0:%m} : {0:%s}", (end - start)); // 0:0
00:01 
但它仍然只能产生0:0:

string s = string.Format("{00:%m} : {00:%s}", (end - start)); // 0:0
我将感谢任何帮助:)


当然是0:0了。您正在测试的网站将向上舍入到最接近的秒数

如果您想模仿它,您还必须总结:

DateTime end = new DateTime(2018, 04, 13, 12, 17, 39, 067);
DateTime start = new DateTime(2018, 04, 13, 12, 17, 38, 893);
var difference = TimeSpan.FromSeconds(Math.Ceiling((end - start).TotalMilliseconds / 1000.0));
string s = string.Format("{0:mm}:{0:ss}", difference);
Console.WriteLine(s);

如前所述-问题在于毫秒精度。可以通过将毫秒的负数相加来减去毫秒:

DateTime end = new DateTime(2018, 04, 13, 12, 17, 39, 067);
DateTime start = new DateTime(2018, 04, 13, 12, 17, 38, 893);
var diff = end.AddMilliseconds(-end.Millisecond) - start.AddMilliseconds(-start.Millisecond);
string s = string.Format("{0:mm} : {0:ss}", diff);
Console.WriteLine (s); // 00:01

注意:例如,如果结束值为38秒和9.67亿秒-因此在同一实际秒内-则将显示00:00。

差异不是只有0.174秒-因此以分钟和秒表示将为0:0-检查(结束-开始).ToString()的结果@PaulF为什么你希望两次约会时间相差1秒?只有174毫秒的差异,你认为会四舍五入吗?新的日期时间(2018,04,13,12,17,39,000)如果你需要第二个精度,你应该删除其他信息。这就是当你错过一些东西时“简单错误”的问题。在这里,你声称他们是一个坚实的一秒钟。但只要看看这个数字就很奇怪了。但不要把它当作一种惩罚。有时我们会问一些愚蠢的问题,但在上面写问题的鲁莽行为应该已经过滤掉了。看看显示的图片——我猜OP通过点击Now标签获得了准确的时间——但只显示了秒的准确时间。在这种情况下,如果用户在同一秒内单击每个标签,那么两个框将显示相同的时间,因此输出应该是00:00。您的代码将显示00:01。虽然现在我得到了正确的计时,即1秒,但我没有得到前导零。我仍然得到0:1的警告,感谢您为帮助我所付出的努力和宝贵的时间:)需要更改为mm&ss的是m&s,而不是0更改为00。0是格式字符串的参数索引。@用户抱歉,我被Netflix分散了注意力:)请立即尝试。感谢您为帮助我所做的努力和宝贵的时间,但我如何添加前导零?ss和mm是打字错误?因为它返回11@DragandDrop:%s&%m将按OP的要求打印0:1,%ss&%mm打印00:01。如果差异超过9秒,则显示会很有趣。您确定没有更改其他内容吗?转到上面的链接拖放并删除%符号并运行它