Hamlet Hakobyans' answer是正確的。但我想至少補充一些解釋。
讓我們一步分析你的問題的步驟:
你說你的字符串是'28/3/2014
,但你在你的例子中使用28/3/2014
。我認爲,28/3/2014
是適合您的情況的正確字符串。
所以,你的真實代碼是;
DateTime d;
DateTime.TryParseExact("28/3/2014", "dd'/'MM'/'yyyy",
CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.None,
out d);
在這種情況下,你不需要使用'
您/
分隔符,但這並不破壞你的代碼。因爲'
是文字字符串分隔符,並且對於這種情況它仍然有效。
但是MM
specifier針對的是01
到12
,該值不適合月份值爲3
。您應該使用M
specifier這是1
到12
。
而且它總是返回我的0001:01:01
因爲你TryParseExact
回報false
(因爲你的格式不符合你的字符串適合),並從it's documentation;
結果
類型:System.DateTime的
此方法返回時,包含日期時間值等價於 的日期和時間中包含的S,如果轉換成功,或 MINVALUE如果轉換失敗。
0001:01:01
等於DateTime.MinValue
field(和其他部分也..)。這就是爲什麼你得到這個價值。
最後,你的代碼應該是;
DateTime d;
DateTime.TryParseExact("28/3/2014", "dd/M/yyyy",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out d);
如果你想28/3/2014
爲string
(DateTime
沒有格式)的結果,你有幾種選擇;
如果您當前的線程文化的DateSeperator
是/和ShortDatePattern
是dd/m/yyyy
,則不需要使用任何東西。只是;
Console.WriteLine(d); //This will be enough.
如果不是的話,你可以使用DateTime.ToString(String, IFormatProvider)
overload與InvariantCulture
等;
Console.WriteLine(d.ToString("dd/M/yyyy", CultureInfo.InvariantCulture));
或者你可以逃脫你/
不管你使用哪種文化等;
Console.WriteLine(d.ToString("dd'/'M'/'yyyy"));
或
Console.WriteLine(d.ToString(@"dd\/M\/yyyy"));
嗯,首先,使用任何'TryParse'風格的方法時,你應該檢查返回* *值是什麼。它在這裏返回'false',它告訴你解析*失敗*。 –
@Damien_The_Unbeliever:然而沒有一個答案說... – leppie
@leppie現在,有:) –