2010-02-24 9 views
7

Ich möchte überprüfen, ob ein Datum ein korrektes Format hat. Es gibt viele Möglichkeiten der richtigen Daten wie:DateTime.TryParse alle möglichen Arten von Daten

  • 02.08.2010
  • 2.8.2010
  • 02.8.2010 02,08
  • 02.August
  • ...

I kann mit jedem Code wie folgt testen:

Aber dann kann ich 40 wenn Aussagen haben. Ist es möglich, alle Daten mit einer if-Anweisung oder einer Schleife zu überprüfen?

Update:

Basierend auf den Antworten so weit, ich bin diesen Code zu testen, aber ich habe ein weiteres Problem. Was passiert, wenn ich 9.2.2010 haben nur 9.2 nicht, dann wird dieser Code nicht funktioniert:

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; 
} 

Muss ich diese mal manuell hinzufügen oder was kann ich tun?

+0

Wie kommt es, dass Sie jedes mögliche Datumsformat als gültige Eingabe akzeptieren? –

+0

Bitte füge Updates zu deiner Frage hinzu oder nutze die Kommentarfunktion. Bitte verwenden Sie auch keine Antworten, um zu sagen, danke, verwenden Sie einen Kommentar oder besser, upvote und markieren Sie als akzeptiert: http://blog.stackoverflow.com/2011/01/how-to-say-thanks-in-an-answer/ – Kev

+0

Könnte das auch sehen [robust-datetime-parser-library-for-net] (http://stackoverflow.com/questions/7297622/robust-datetime-parser-library-for-net) – nawfal

Antwort

8

Sie können etwas wie das Folgende verwenden, aber beachten Sie, dass mehr als ein Format das gleiche Datum analysieren kann. Zum Beispiel kann der 10/11/12 als yy/MM/dd oder MM/dd/yy geparst werden, die beide gültige US-Datumsformate sind. MM/TT/JJ ist häufiger, daher erscheint es zuerst in der Liste und ist die, die durch den folgenden Code zurückgegeben wird (wenn Sie es mit einer US-Kultur anstelle der Kultur im Beispiel verwenden).

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

In der Teil der Welt, in der ich lebe, würden Menschen es als "dd.mm.yy" analysieren. Wenn man das berücksichtigt, macht die ganze Frage wenig Sinn, weil sie anfällig für Fehlinterpretationen ist. –

9

Ja ParseExact kann eine Liste von Formaten zu prüfen, gegen zu nehmen.

Verwandte Themen