2013-03-04 43 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