2012-02-27 52 views
0

我試圖解析從秒錶到特定格式的經過時間==> hh:mm:ss.f,因爲我使用它作爲時間計數器上的顯示。這是我嘗試做:從秒錶經過的時間解析DateTime始終始於12:00:00

string counter = DateTime.Parse(_stopwatch.Elapsed.ToString()).ToString("hh:m:ss.f"); 

的問題是,不是計數器顯示看起來像這樣:XX:XX:XX.X它總是顯示爲這樣:12:XX:XX.X

爲什麼它總是從12開始?

我希望看到像這樣的內容:00:12:34.5表示12分鐘。已經過去了,而不是12:12:34.5。

我在這裏錯過了什麼?

謝謝。

UPDATE

固定我自己的問題,這樣做:

string formattedResult = _stopwatch.Elapsed.ToString(@"hh\:mm\:ss\.f"); 

回答

3

您使用hh它採用12小時制,而不是HH它採用了24小時時鐘。

注意,這有沒有關係解析來自stopwach的結果 - 你會得到相同的,如果你寫:

using System; 

class Test 
{ 
    static void Main() 
    { 
     DateTime dateTime = new DateTime(2012, 2, 27, 0, 34, 45, 56); 
     // Prints 12:34:45 
     Console.WriteLine(dateTime.ToString("hh:mm:ss")); 
    } 
} 

爲什麼要格式化的Stopwatch.Elapsed結果只來解析目前尚不清楚它再次,然後重新格式化它。儘量避免多餘的字符串轉換。如果您使用的是.NET 4,則TimeSpan無論如何都支持standardcustom格式。

+0

嗨喬恩,感謝回答。我在WP7應用程序中這樣做,所以我無法訪問.NET 4的自定義字符串格式化程序。我試着做_stopwatch.Elapsed.ToString();但是將其格式化爲我不想要的毫秒。像_stopwatch.Elapsed.ToString(「HH:mm:ss [.f]」);也沒有工作。 我正在尋找deciseconds,因此@「hh \:mm \:ss \ .f」爲我做了訣竅。 – Cranialsurge 2012-02-27 10:43:38

+0

@Cranialsurge:我仍然不會將它轉換爲日期/時間。只需爲每個部分使用自定義格式字符串即可。從根本上說,這*不是*日期/時間,將其視爲一個不好的主意。例如,如果您需要24小時以上,您希望做什麼? – 2012-02-27 10:45:35

+0

+喬恩:是的,我不會將它轉換成日期時間了。我需要的是我在上面更新的字符串。我絕對不會超過24小時滿足這個特殊要求,但我理解您的擔憂。理想情況下,我所尋找的只是一種特定格式的字符串,僅用於顯示目的。如果只有ToString()會接受比TimeSpan提供的標準'c','g'和'd'格式化程序更多的東西,我可以直接存儲_stopwatch.Elapsed。 – Cranialsurge 2012-02-27 10:50:16

0

使用以下命令:

string formattedResult = _stopwatch.Elapsed.ToString(@"hh\:mm\:ss\.f"); 
相關問題