2016-06-28 44 views
0

這行代碼返回truetime等於"01/02/2016"的TryParse弦號碼爲DateTime返回true

DateTime time; 
bool result = DateTime.TryParse("1,2", CultureInfo.CurrentCulture, DateTimeStyles.None, out time); 

我能做些什麼來回報false

我不使用DateTime.TryParseExact,因爲我將不得不指定"YY/MM/DD"之類的格式,但我需要使用PC上的默認格式。

+3

'我該怎麼做TryParse方法返回False?' - 給它一個無效的字符串解析。 –

+0

我猜想OP想要爲特定的字符串返回'False''「1,2」' –

+0

這怎麼可能返回'true'? –

回答

3

對於你要做的事情,你可能最好使用TryParseExact。除非對字符串進行任意假設,否則它將返回false,除非字符串與您想要的模式完全匹配。

根據this,您應該能夠指定一種文化,並且"d" as the format string indicating a "short date"TryParseExact應該效仿,並使用您爲短日期提供的文化中指定的格式。

+0

這不會真的讓他正確地使用當前的文化 - 例如,如果用戶期望月份與第一天相比......指定一個格式字符串將覆蓋那個,不是? –

+0

是的,它會的。我只是假設「第一個月」或「第一天」是文化任務的一部分。除非選擇了錯誤的文化,否則我不會指望與標準不同。 –

+1

OP明確表示他不想指定格式。 –

0

如果您可以使用標準日期格式,那麼您應該使用其中一個限定符(在您的情況下,"d"可能會有效)的DateTime.TryParseExact。否則,你需要一個圍繞DateTime.TryParse的自定義函數。

DateTime.TryParse將嘗試通過忽略一些缺失的數據並在可能的地方填寫一些缺失數據(請參閱MSDN)來幫助您。如果你想使用當前的文化來解析它,但你仍然想排除TryParse認爲有效的特定字符串,你應該在運行嘗試解析之前排除它們。例如

public bool MyTryParse(string dateString, out DateTime dt) 
{ 
    dt = new DateTime(); 
    if (dateString == null) 
     return false; 


    if (dateString.Length > 3) 
      return false; 

    return DateTime.TryParse(dateString, CultureInfo.CurrentCulture, DateTimeStyles.None, out dt);    
} 

您可以添加任何您想要的其他特殊情況測試。請注意,TryParseExact可能不是您想要的,,除非您可以使用標準日期格式作爲指定的格式字符串(任何自定義的字符串將覆蓋CurrentCulture可能指定的內容);比較例如下面的輸出:

DateTime dt; 
bool res = DateTime.TryParseExact("02/03/2001", "MM/dd/yyyy", CultureInfo.GetCultureInfo("en-GB"), DateTimeStyles.None, out dt); 
Console.WriteLine(dt); 
// will output Feb 3, 2001, but a user in GB would probably intend Mar 3, 2001 

bool res = DateTime.TryParseExact("02/03/2001", "d", CultureInfo.GetCultureInfo("en-GB"), DateTimeStyles.None, out dt); 
Console.WriteLine(dt); 
// will output Mar 3, 2001, but might be too restrictive for what you want? 
res = DateTime.TryParse("02/03/2001", CultureInfo.GetCultureInfo("en-GB"), DateTimeStyles.None, out dt); 
Console.WriteLine(dt); 
// will output Mar 2, 2001, but goes back to your original problem 
+0

嗨,感謝所有的答案,我終於用Dan Field的方式表達了我的想法,它的工作原理,我使用它的方式,因爲我必須非常明確地使用TryParseExact方法,並且我希望爲用戶提供更多的自由度。 – mando100