[Da det ikke er godt, hvis vi fortsætter i kommentarerne (kommentarerne bliver lange), vil jeg bare lægge det, jeg synes, som en løsning her]
For at formatere dateBuy
til det format, du ønsker, skal du også sætte strengformatet i ToString()
Det vil sige i stedet for
dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString();
sætte
dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString("yyyy-MM-dd");
Ellers er det muligt for ToString()
at producere noget som "2015-10-16 12:00:00 AM" i stedet for "2015-10-16"
Men da du bruger ParseExact
, input til dateBuy2
skal også være i formatet "åååå-MM-dd", hvilket besejrer formålet. Du kan overveje at bruge DateTimePicker
sådan at du kan styre inputformatet.
Alternativt kan du bruge DateTime.Parse
eller TryParse
(som foreslået af Martheen) i stedet noget som dette
try {
DateTime dt = DateTime.Parse(txtDateBuy.Text);
dateBuy = dt.ToString("yyyy-MM-dd");
} catch (Exception exc) {
//wrong format, do something to tell the user
}
Hvis input skal være i TextBox
du må hellere sætte try-catch
for at forhindre dit programnedbrud for at tage forkert formateret input, hvis du bruger Parse
.
Hvor som om du bruger TryParse
du kan sætte det i if-else
blokere sætning i stedet for
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
}
For at få CultureInfo
enum
du skal tilføje reference til System.Globalization
[Redigeret efter forslag givet af hr. Soner Gonul]