[Eftersom det inte är bra om vi fortsätter i kommentarerna (kommentarerna blir långa) så lägger jag bara upp vad jag tycker som en lösning här]
För att formatera dateBuy
till det format du vill ha, bör du också lägga strängformatet i ToString()
Det vill säga istället för
dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString();
sätta
dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString("yyyy-MM-dd");
Annars är det möjligt för ToString()
att producera något som "2015-10-16 12:00:00 AM" istället för "2015-10-16"
Men eftersom du använder ParseExact
, indata för dateBuy2
måste också vara i formatet "åååå-MM-dd" vilket motverkar syftet. Du kan överväga att använda DateTimePicker
så att du kan styra inmatningsformatet.
Alternativt kan du använda DateTime.Parse
eller TryParse
(som föreslagits av Martheen) istället, något sånt här
try {
DateTime dt = DateTime.Parse(txtDateBuy.Text);
dateBuy = dt.ToString("yyyy-MM-dd");
} catch (Exception exc) {
//wrong format, do something to tell the user
}
Om inmatning måste finnas i TextBox
det är bättre att använda try-catch
för att förhindra att ditt program kraschar för att ta felformaterad indata om du använder Parse
.
Där som om du använder TryParse
du kan lägga det i if-else
blockera uttalande istället
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
}
För att få CultureInfo
enum
du måste lägga till referens till System.Globalization
[Redigerad efter förslag från Mr. Soner Gonul]