Ich muss eine Prüfung basierend auf einem Zeichenfolgenwert durchführen, ob es sich um ein Datum oder eine Dezimalzahl handelt, aber die Datumsanalyse gibt immer true für die Dezimalzahl zurück.
string val = "3.5";
DateTime oDate = DateTime.Parse(val);
Es wird ein gültiges Datum zurückgegeben 3/5/2019
.
Wie kann ich eine Zeichenfolge überprüfen, um festzustellen, ob es sich um ein gültiges Datum handelt, wenn das Datumsformat nicht bekannt ist?
DateTime.ParseExact
Sie, wenn Sie wissen, welche Formate es annehmen kann / sollteTryParseExact
gültige Datumsformate verwenden und angeben.DateTime.Parse
versucht mehrere Muster. Wenn Sie nur bestimmte erkennen möchten, analysieren Sie sie speziell.Antworten:
Das Problem ist das
"3.5"
ist ein gültiges Datum betrachtet (und auch eine Dezimalzahl).Wenn Sie möchten, dass der Dezimaltyp immer "gewinnt" (dh Sie möchten nicht
isDate
undisDecimal
beides sein)true
), Ihrer Validierung eine Dezimalprüfung hinzu.Eine Möglichkeit besteht darin, mithilfe der
TryParse
Methoden (die a zurückgeben,bool
wenn eine Zeichenfolge auf den Typ analysiert werden kann, und die einenout
Parameter auf den konvertierten Wert setzen) zu bestimmen, ob die Zeichenfolge in einen Typ konvertiert werden kann, z.quelle
isDate
liegt esfalse
daran, dass es eine Prüfung für enthältisDecimal
. Haben Sie nicht darum gebeten?Überprüf den offizielle Dokumentation zu ParseExact
Wenn Sie die genaue Darstellung kennen, können Sie Folgendes tun:
Wenn Sie es nicht wissen, dann bleiben Sie bei den kulturellen Konvektionen
quelle