[Karena tidak baik jika kita melanjutkan di komentar (komentarnya akan panjang), saya hanya akan mengajukan apa yang saya pikirkan sebagai solusi di sini]
Untuk memformat dateBuy ke format yang Anda inginkan, Anda juga harus meletakkan format string di ToString()
Artinya, alih-alih
dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString();
taruh
dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString("yyyy-MM-dd");
Jika tidak, dimungkinkan untuk ToString() untuk menghasilkan sesuatu seperti "2015-10-16 12:00:00 AM" alih-alih "2015-10-16"
Namun, karena Anda menggunakan ParseExact , masukan untuk dateBuy2 juga harus dalam format "yyyy-MM-dd" yang mengalahkan tujuan. Anda dapat mempertimbangkan untuk menggunakan DateTimePicker sedemikian rupa sehingga Anda dapat mengontrol format input.
Atau, Anda dapat menggunakan DateTime.Parse atau TryParse (seperti yang disarankan oleh Martheen) sebagai gantinya, seperti ini
try {
DateTime dt = DateTime.Parse(txtDateBuy.Text);
dateBuy = dt.ToString("yyyy-MM-dd");
} catch (Exception exc) {
//wrong format, do something to tell the user
}
Jika input harus di TextBox sebaiknya Anda memasukkan try-catch untuk mencegah program Anda mogok karena mengambil input dengan format yang salah jika Anda menggunakan Parse .
Dimana jika Anda menggunakan TryParse Anda dapat memasukkannya ke dalam if-else blokir pernyataan sebagai gantinya
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
}
Untuk mendapatkan CultureInfo enum anda perlu menambahkan referensi ke System.Globalization
[Diedit setelah saran yang diberikan oleh Pak Soner Gonul]