WPF中TimeSpan的坑

原文: WPF中TimeSpan的坑

記一次在WPF中,在將格式爲「DD.HH:mm:ss」字符串轉換成TimeSpan時遇到的坑html

若是字符串爲:DD.HH:mm:ss,轉換結果正確。例如:測試

1             var currentValue = "2.12:25:45.555"; 2  TimeSpan result; 3             var success = TimeSpan.TryParse(currentValue, out result); 4             Console.Write("轉換前:"+currentValue); 5             Console.WriteLine("轉換後:"+success + " "+ result.ToString());

以上輸出結果:轉換前:2.12:25:45.555轉換後:True 2.12:25:45.555spa

分別更改時間戳不一樣部分,使其超過對應的最大值code

  1. 更改天大於30:轉換前:30.12:25:45.555 轉換後:True 30.12:25:45.5550000
  2. 更改小時大於12:轉換前:2.23:25:45.555 轉換後:True 02.23:25:45.5550000
  3. 更改小時大於24:轉換前:2.25:25:45.555 轉換後:False 00:00:00 失敗
  4. 更改分鐘大於60:轉換前:2.12:75:45.555 轉換後:False 00.00:00:00 失敗
  5. 更改秒大於60:轉換前:2.12:25:75.555 轉換後:False 00.00:00:00 失敗
  6. 更改毫秒大於1000:轉換前:2.12:25:45.5555 轉換後:True 02.12:25:45.5550000 成功

問題:htm

對於毫秒數,咱們知道1s=1000ms。當字符串中毫秒數超過1000時,會是什麼狀況。blog

如上測試能夠看出,在ToString()時,毫秒位數爲7位。超過其範圍4位。最後四位是什麼含義呢?答案:最後四位爲納秒有效數字位。(1ms=10000納秒)字符串

圖1毫秒部分大於3位小於7位get

如圖1所示。轉換前:2.12:25:45.125555  轉換後:True 2.12:25:45.1255550 ,毫秒125it

 

圖2毫秒部分爲7位class

如圖2所示。轉換前:2.12:25:45.1255555  轉換後:True 2.12:25:45.1255555  ,毫秒125

圖3毫秒部分大於7位

如圖3所示。轉換前:2.12:25:45.125555555  轉換後:False 轉換失敗

總結:

  • 字符串轉TimeSpan時對各部分值的設定有嚴格的限制,超過限制值,其並不會將相應部分向高位進位。(如小時部分爲26,它不會轉換成一天2小時。
  • 字符串毫秒部分在轉換時,它只截取前三位做爲Milliseconds(毫秒)的有效部分,進行轉換,截取接下來的四位爲TimeSpane中的納秒的值。即毫秒部分最多隻能有7位,超過將轉換失敗(超限)。
  • TimeSpan能夠用@"dd\.hh\:mm\:ss\.fff"等進行字符串格式化。
相關文章
相關標籤/搜索