2014-03-28 21 views
1

我試圖解析 時間字符串'28/3/2014 與方法:日期時間精確的TryParse返回0001:01:01

DateTime d; 
DateTime.TryParseExact("28/3/2014", "dd'/'MM'/'yyyy", 
         System.Globalization.CultureInfo.InvariantCulture, 
         System.Globalization.DateTimeStyles.None, 
         out d); 

而且它總是返回我0001:01:01

你能告訴如何設置轉換參數嗎? 我嘗試設置

System.Globalization.CultureInfo.CurrentCulture 
System.Globalization.DateTimeStyles.AssumeLocal 

由於沒有影響

28/3/2014是一個例子。日期可能還喜歡28/12/2014

+3

嗯,首先,使用任何'TryParse'風格的方法時,你應該檢查返回* *值是什麼。它在這裏返回'false',它告訴你解析*失敗*。 –

+0

@Damien_The_Unbeliever:然而沒有一個答案說... – leppie

+0

@leppie現在,有:) –

回答

2

你的模式必須

"dd'/'M'/'yyyy" 

參考文章Custom Date and Time Format Strings以獲取更多信息。

+0

@szpic,爲什麼你認爲這不起作用?你有沒有嘗試過? –

+1

@szpic - 真的嗎?你是否花了5秒左右的時間來嘗試確認它不起作用? –

0

試試這個:

DateTime d; 
DateTime.TryParseExact("28/3/2014", "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out d); 
1

你輸入字符串月份沒有前導0,所以你可以試試這個:

DateTime d; 
DateTime.TryParseExact("28/03/2014", "dd/MM/yyyy", 
         System.Globalization.CultureInfo.InvariantCulture, 
         System.Globalization.DateTimeStyles.None, out d); 

DateTime d; 
DateTime.TryParseExact("28/3/2014", "dd/M/yyyy", 
         System.Globalization.CultureInfo.InvariantCulture, 
         System.Globalization.DateTimeStyles.None, out d); 
0

的問題是格式輸入數字爲幾個月。您已將格式設置爲「MM」,但僅作爲參數傳遞3。嘗試28/03/2014(「03」而不是簡單的「3」)。 順便說一下,格式字符串可以簡單地爲「dd/MM/yyyy」而不是「dd」/「MM」/「yyyy」。 檢查它http://dotnetfiddle.net/I3Dyod

1

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針對的是0112,該值不適合月份值爲3。您應該使用M specifier這是112

而且它總是返回我的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/2014stringDateTime沒有格式)的結果,你有幾種選擇;

如果您當前的線程文化的DateSeperator是/和ShortDatePatterndd/m/yyyy,則不需要使用任何東西。只是;

Console.WriteLine(d); //This will be enough. 

如果不是的話,你可以使用DateTime.ToString(String, IFormatProvider) overloadInvariantCulture等;

Console.WriteLine(d.ToString("dd/M/yyyy", CultureInfo.InvariantCulture)); 

或者你可以逃脫你/不管你使用哪種文化等;

Console.WriteLine(d.ToString("dd'/'M'/'yyyy")); 

Console.WriteLine(d.ToString(@"dd\/M\/yyyy")); 
相關問題