-3

我对这个stopWatch.Elapsed属性感到非常困惑。它以这种格式显示时间值在此处输入图像描述

我想知道我应该在这个输出的末尾添加什么。是ms( 01:20:17.0550410ms) 还是只是s( 01:20:17.0550410s)?而且,如果我只想取ms这个输出的一部分并用它做一些计算,我应该取哪个值,是吗.055041055.041我的问题可能听起来很傻,但我真的很困惑!请帮忙。

4

7 回答 7

8

显示的单位是“秒的小数部分”,小数点后第 7 位 - 即百万分之一秒。

因为一毫秒是 0.001 秒,所以你的毫秒数是 55.041。

现在,正如其他人所说,使用stopWatch.Elapsed.TotalMilliseconds(获取所有毫秒数)或stopWatch.Elapsed.Milliseconds(获取所有毫秒数少于 1 秒)。

于 2014-07-08T22:30:44.977 回答
5

我对这个 stopWatch.Elapsed 属性感到非常困惑。它以这种格式显示时间值

我将从头开始,只是为了确保一切都被理解。

Microsoft .Net 框架设计者已决定所有存储信息的变量都来自Class 或 Struct(ture)。这两种基本类型都有一些默认方法。ValueType 的这些方法之一(我将在下面讨论)是.ToString()。当您ToString()在 Windows 运行时结构上调用该方法时,它会为不覆盖的值类型提供默认行为ToString()

我假设您正在谈论System.Diagnostics.Stopwatch类。该文档指出:

秒表实例可以测量一个间隔的经过时间,或跨多个间隔的总经过时间。在典型的秒表方案中,您调用 Start 方法,然后最终调用 Stop 方法,然后使用 Elapsed 属性检查经过的时间。

在我们开始查看秒表的属性之前,我们需要了解,为了让秒表工作,需要有一种方法来存储时间量(信息)。在这种情况下,时间的大小是两个时间点之间差异的数字表示;在这种情况下,秒表何时开始和秒表何时结束。Microsoft .Net 创建了一个名为TimeSpan的结构来存储此值。

查看Stopwatch.Elapsed它的类型的属性的文档TimeSpan

在此处输入图像描述

由于您的屏幕截图似乎在控制台应用程序中,因此我假设代码(应始终提供但不提供)如下:

Console.Writeline("Took Time: " + stopWatch.Elapsed.ToString());

此代码使用TimeSpan 的 .ToString() 覆盖TimeSpan将 转换为 a :string

在此处输入图像描述

因此,不传递值.ToString()是一个空值,默认为("c")它在 TimeSpan 格式字符串中:

在此处输入图像描述

所以使用你的例子:

01:20:17.0550410s

应该很明显,01是小时,20是分钟,17是秒,.0550410是十分之一秒(分秒)。在末尾添加任何字符串值很可能没有意义,因为所有数字都具有不同的持续时间。如果您想要更具体,我认为唯一有意义的方法是将其更改为:

01h 20m 17.0550410s

或者

01h 20m 17s 055.0410ms
于 2014-07-08T23:28:07.193 回答
1

Elasped 是一个 TimeSpan,您所展示的是从将其写入控制台的表示(与在任何非字符串对象上调用 .ToString() 相同),该表示以小时:分钟:秒.分数秒为单位。如果您想以特定数量显示此内容,则 TimeSpan 上有此属性,因此不要这样做

Console.WriteLine(stopWatch.Elapsed);

你可以做

Console.WriteLine(stopWatch.Elapsed.TotalMilliseconds);

一个完整的例子来澄清

Console.WriteLine(
"The timer ran for " + stopWatch.Elapsed.Hours + " Hours, " 
+ stopWatch.Elapsed.Minutes + " Minutes and " 
+ stopWatch.Elapsed.Seconds + ". this amounts to a total of "
+ stopWatch.Elapsed.TotalMilliseconds + " ms" );
于 2014-07-08T22:28:41.730 回答
1

根据TimeSpan 的文档

TimeSpan 值可以表示为 [-]d.hh:mm:ss.ff,其中 [...] ss 是秒,ff 是秒的分数

所以在你的情况下,它是 17.0550410 秒。

于 2014-07-08T22:29:59.053 回答
1

看起来你只是在使用属性的默认.ToString()方法Stopwatch.Elapsed,它实际上是一个TimeSpan对象。您可以完全控制此 TimeSpan 的字符串格式,以及使用它的数字组件进行数学运算(舍入、加法等)。请阅读:Stopwatch.Elapsed 属性

于 2014-07-08T22:30:10.517 回答
0

快速搜索“c# stopwatch”会返回MSDN 文档,显示它Stopwatch.Elapsed是 TimeSpan。然后在“c# TimeSpan”上搜索会返回MSDN 文档,该文档显示TimeSpan.ToString()返回具有以下格式的字符串:[-][d.]hh:mm:ss[.fffffff]. 那只是使用谷歌。下次在问你的问题之前尝试做一些研究。

于 2014-07-08T22:30:44.300 回答
0

假设你有兴趣StopWatch.Elapsed,那么...

在这种情况下,我发现文档通常很有帮助。

它指出StopWatch.Elapsed返回

一个只读TimeSpan,表示当前实例测量的总经过时间。

TimeSpan的文档说明了它的许多可用属性,其中一个是Milliseconds,另一个是TotalMilliseconds。根据文档:

毫秒 - 获取当前 TimeSpan 结构所表示的时间间隔的毫秒分量。

然而

TotalMilliseconds - 获取当前 TimeSpan 结构的值,以整毫秒和小数毫秒表示。

其他属性允许您检查天、小时、分钟、秒等。请使用文档,因为它可以为每个人节省大量时间和精力。

于 2014-07-08T22:31:25.857 回答