[Da es nicht gut ist, wenn wir in den Kommentaren fortfahren (die Kommentare werden lang sein), werde ich hier nur das posten, was ich als Lösung denke]
Um dateBuy
zu formatieren Um das gewünschte Format zu erreichen, sollten Sie auch das Zeichenfolgenformat in ToString()
einfügen
Das heißt, anstelle von
dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString();
setzen
dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString("yyyy-MM-dd");
Ansonsten ist es für ToString()
möglich etwas wie „2015-10-16 00:00:00 AM“ anstelle von „2015-10-16“ zu produzieren
Da Sie jedoch ParseExact
verwenden , die Eingabe für dateBuy2
muss auch im Format "JJJJ-MM-TT" vorliegen, was den Zweck verfehlt. Sie können die Verwendung von DateTimePicker
in Betracht ziehen sodass Sie das Eingabeformat steuern können.
Alternativ können Sie DateTime.Parse
verwenden oder TryParse
(wie von Martheen vorgeschlagen) stattdessen etwas in der Art
try {
DateTime dt = DateTime.Parse(txtDateBuy.Text);
dateBuy = dt.ToString("yyyy-MM-dd");
} catch (Exception exc) {
//wrong format, do something to tell the user
}
Wenn die Eingabe in der TextBox
erfolgen muss Sie setzen besser try-catch
ein um zu verhindern, dass Ihr Programm abstürzt, weil es falsch formatierte Eingaben akzeptiert, wenn Sie Parse
verwenden .
Als ob Sie TryParse
verwenden würden Sie können es in if-else
einfügen block-Anweisung statt
DateTime dt;
if (DateTime.TryParse(txtDateBuy.Text, CultureInfo.InvariantCulture, DateTimeStyles.AssumeLocal, out dt)) {
//correct format, do something using dt
} else {
//incorrect format, warns the user
}
Um CultureInfo
zu erhalten enum
Sie müssen einen Verweis auf System.Globalization
hinzufügen
[Bearbeitet nach einem Vorschlag von Mr. Soner Gonul]