[Aangezien het niet goed is als we doorgaan in de commentaren (de commentaren zullen lang worden), zal ik hier gewoon plaatsen wat ik denk als een oplossing]
Om dateBuy
op te maken naar de gewenste indeling, moet u ook de tekenreeksindeling in de ToString()
Dat wil zeggen, in plaats van
dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString();
zet
dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString("yyyy-MM-dd");
Anders is het mogelijk voor de ToString()
om iets als "2015-10-16 12:00:00 AM" te produceren in plaats van "2015-10-16"
Aangezien u echter ParseExact
. gebruikt , de invoer voor de dateBuy2
moet ook de indeling "jjjj-MM-dd" hebben, wat het doel verslaat. U kunt overwegen om DateTimePicker
. te gebruiken zodat u het invoerformaat kunt regelen.
Als alternatief kunt u DateTime.Parse
. gebruiken of TryParse
(zoals voorgesteld door Martheen) in plaats daarvan, zoiets als dit
try {
DateTime dt = DateTime.Parse(txtDateBuy.Text);
dateBuy = dt.ToString("yyyy-MM-dd");
} catch (Exception exc) {
//wrong format, do something to tell the user
}
Als invoer in de TextBox
moet zijn je kunt beter try-catch
. plaatsen om te voorkomen dat uw programma crasht vanwege het aannemen van verkeerd geformatteerde invoer als u Parse
. gebruikt .
Waar alsof je TryParse
. gebruikt je kunt het in if-else
plaatsen blok instructie in plaats daarvan
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
}
Om CultureInfo
te krijgen enum
je moet een verwijzing toevoegen naar System.Globalization
[Bewerkt na suggestie van de heer Soner Gonul]