2013-03-04 69 views
6

我有一些代码碾碎了很多数据,所以我在星期四开始了它,并在周末让它运行。星期一,我回来了,看到它结束了。我使用了秒表功能来跟踪代码的运行时间。不过,我结束了秒表已经过输出

Elapsed: 2.18:57:55.xxx 

据我所知,它的输出通常H:M:SS,但不明白的第一位,特别是因为它已经运行了天。它只是从几小时转换到几天?我离开它跑了那么久,它打破了?编辑:对不起,我并不是说它在星期一就完成了。我的意思是,星期一(当我回到电脑的时候),它已经完成了。

+0

你的机器在没有其他任何事情时可能暂停/休眠? – 2013-03-04 14:53:25

+0

你在输出上调用了ToString()吗? – 2013-03-04 14:53:27

+0

另外:有没有可能在周五开始,而不是周四? – 2013-03-04 14:56:40

回答

8

是 - 这是的TimeSpan.ToString格式:

返回的字符串被格式化与 “c” 的格式说明,并具有以下的格式:

[ - ] [d]为hh:mm :ss [.fffffff]

方括号([和])中的元素可能不包含在返回的字符串中。冒号和句点(:和。)是文字字符。下表列出了非文字元素。请注意,ToString()方法返回的字符串不区分大小写。

由于没有显示总小时数的格式说明符,因此您需要计算它。如果您希望小时显示为单个数字,请使用:

TimeSpan ts = new TimeSpan(2,18,57,55); 

var output = string.Format("{0}:{1}", 
          ts.Days*24 + ts.Hours, 
          ts.ToString("mm\\:ss\\.ffff")); 

//output = `66:57:55.0000` 
+3

如果周四开始并在星期一进行检查,那么周五,周六和周日全部都是中间的;我们会期望一个'3.something',不是吗? – 2013-03-04 14:56:11

+0

它更容易使用'ts.TotalHours' – SysDragon 2013-03-04 15:03:41

+1

@SysDragon除Totalhours包括小数部分,并将如果您格式化它没有小数四舍五入 - 您可以截断数字,但真的会更容易? – 2013-03-04 15:07:01

0

这是预期的行为。从文档为Timespan.ToString()

返回的字符串被格式化与 “c” 的格式说明,并具有以下的格式:

[ - ] [d]为hh:mm:ss的[.fffffff]

“d” - 时间间隔中的天数。如果时间间隔小于一天,则此元素被省略。

+0

如果星期四开始并在星期一进行检查,那么周五,周六和周日全部都是中间的;我们会期望一个'3.something',不是吗? – 2013-03-04 14:56:23

+0

@MarcGravell问题不清楚,但从更新很明显,问题是关于输出格式,而不是输出值:) – 2013-03-04 15:04:13