2016-11-11 65 views
1

我從比賽中許多不同的格式(或多或少任何小時,分鐘,秒和毫秒的組合)時的結果:DateTime.TryParseExact單個第二

  • 01:22:51.15
  • 22: 15.12
  • 15.0
  • 12:21
  • ...

我分析他們一個有效的格式列表,到目前爲止所有的格式都可以工作,除了一個:單一的第二種格式,例如「5」。

出於某種原因,以下列表(包含「s」作爲第一項)並不幫助我將字符串「5」解析爲DateTime,但「25」仍可以正常工作。

var timeString = "5"; 
var timeFormats = new[] { "s", "s.f", "s.ff", "ss", "ss.f", "ss.ff", "m:ss", "m:ss.f", "m:ss.ff", "mm:ss", "mm:ss.f", "mm:ss.ff", "H:mm:ss", "H:mm:ss.f", "H:mm:ss.ff", "HH:mm:ss", "HH:mm:ss.f", "HH:mm:ss.ff" }; 
DateTime timeValue; 
DateTime.TryParseExact(timeString, timeFormats, null, DateTimeStyles.None, out timeValue); 

任何想法爲什麼這不工作,因爲我期望它?還是有更清晰的方式來覆蓋所有這些時間格式,而無需添加其他nuget包...? 乾杯!

+0

我不認爲這是太多的要求什麼代碼目前給你? 「這不起作用」並不值得繼續。 – Abion47

+0

您正在使用時間跨度。這就是'TimeSpan'的意思,而不是'DateTime'。 – Luaan

+0

對不起,我的意思是TryParseExact返回false。 –

回答

2

由於格式中只有一個字符,因此它被視爲the Sortable standard format,而不是以秒爲單位的自定義格式。

要更改此設置,請將自定義格式前綴爲%字符,如"%s"中所述。見"Using single custom format specifiers"

另外,要認識到如果這些是比賽的實際經過時間,TimeSpan是比DateTime更合適的數據結構。切換時請小心,因爲兩個對象之間的所有格式化標記都不相同。特別是,TimeSpan使用h數小時,而不是H。見Custom TimeSpan Format Strings

+0

%s做了詭計,謝謝。我知道TimeSpan,但我必須將它作爲DateTime存儲在數據庫中,因此將它解析爲DateTime。 –

+2

您不應將其作爲日期時間存儲在數據庫中。相反,應將其存儲爲總秒數或總毫秒數或您需要的任何精度。作爲DateTime存儲使用的是錯誤的類型,並可能導致錯誤。 –

相關問題