2010-02-24 74 views
7

我想檢查日期是否具有正確的格式。有沒有像正確的日期的很多可能性:DateTime.TryParse所有可能的日期類型

  • 2010年8月2日
  • 2010年8月2日
  • 2010年8月2日02.08
  • 02.August
  • ...

我可以用這樣的代碼測試每個:

if (DateTime.TryParse(DateTime.ParseExact(date, "dd.M.", 
           new CultureInfo("sl-SI")).ToString(), out dt)) 

但是我可以有40條if語句。是否可以使用一個if語句或一個循環來檢查所有日期?

更新:

基於答案爲止,我測試的代碼,但我有更多的一個問題。如果我剛纔沒有9.2那麼2010年2月9日該代碼將無法正常工作:

CultureInfo ci = CultureInfo.GetCultureInfo("sl-SI"); 
string[] fmts = ci.DateTimeFormat.GetAllDateTimePatterns(); 

if (DateTime.TryParseExact(date, fmts, ci, DateTimeStyles.AssumeLocal, out dt)) 
{ 
    DateTime = Convert.ToDateTime(date); 
    Check = true; 
} 

我必須手動添加此次我能做些什麼?

+0

您如何接受每種可能的日期格式作爲有效輸入? – 2010-04-27 17:24:31

+0

請添加更新到您的問題或使用評論功能。也請不要使用答案說謝謝,使用評論或更好,upvote和標記爲接受:http://blog.stackoverflow.com/2011/01/how-to-say-thanks-in-an-answer/ – Kev 2011-01-29 15:36:58

+0

可能也想看到這個[robust-datetime-parser-library-for-net](http://stackoverflow.com/questions/7297622/robust-datetime-parser-library-for-net) – nawfal 2014-01-30 08:05:01

回答

8

您可以使用類似下面的內容,但要注意多個格式可能能夠解析相同的日期。例如10/11/12可以解析爲yy/MM/dd或MM/dd/yy,它們都是有效的美國日期格式。 MM/dd/yy更常見,所以它首先出現在列表中,並且是下面代碼返回的那個(如果您在美國文化中使用它,而不是示例中的文化)。

string testValue = "10.11.12"; 

DateTime result; 
CultureInfo ci = CultureInfo.GetCultureInfo("sl-SI"); 
string[] fmts = ci.DateTimeFormat.GetAllDateTimePatterns(); 
Console.WriteLine(String.Join("\r\n", fmts)); 
if (DateTime.TryParseExact(testValue, fmts, ci, 
    DateTimeStyles.AssumeLocal, out result)) 
{ 
    Console.WriteLine(result.ToLongDateString()); 
} 
+3

在我生活的世界的一部分,人類會把它解析爲「dd.mm.yy」。考慮到這一點,整個問題沒有什麼意義,因爲它容易出現誤解。 – 2010-02-24 13:46:59

9

是的ParseExact可以採取格式列表來檢查。

var formats = new[] { "M.d.yyyy", "dd.MM.yyyy" }; 
var dateValue = DateTime.ParseExact(
    dateString, formats, new CultureInfo("sl-SI"), DateTimeStyles.None); 
相關問題