[Vì sẽ không tốt nếu chúng ta tiếp tục nhận xét (bình luận sẽ dài), tôi sẽ chỉ đưa ra những gì tôi nghĩ như một giải pháp ở đây]
Để định dạng dateBuy
sang định dạng bạn muốn, bạn cũng nên đặt định dạng chuỗi trong ToString()
Đó là, thay vì
dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString();
đặt
dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString("yyyy-MM-dd");
Nếu không, có thể xảy ra với ToString()
để sản xuất một cái gì đó như "2015-10-16 12:00:00 AM" thay vì "2015-10-16"
Tuy nhiên, vì bạn sử dụng ParseExact
, đầu vào cho dateBuy2
cũng phải ở định dạng "yyyy-MM-dd" làm mất đi mục đích. Bạn có thể cân nhắc sử dụng DateTimePicker
để bạn có thể kiểm soát định dạng đầu vào.
Ngoài ra, bạn có thể sử dụng DateTime.Parse
hoặc TryParse
(theo gợi ý của Martheen) thay vào đó, một cái gì đó như thế này
try {
DateTime dt = DateTime.Parse(txtDateBuy.Text);
dateBuy = dt.ToString("yyyy-MM-dd");
} catch (Exception exc) {
//wrong format, do something to tell the user
}
Nếu đầu vào phải nằm trong TextBox
tốt hơn bạn nên đặt try-catch
để ngăn chặn sự cố chương trình của bạn do sử dụng dữ liệu đầu vào có định dạng sai nếu bạn sử dụng Parse
.
Ở đâu như thể bạn sử dụng TryParse
bạn có thể đặt nó trong if-else
câu lệnh khối thay vào đó
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
}
Để tải CultureInfo
enum
bạn cần thêm tham chiếu vào System.Globalization
[Đã chỉnh sửa sau đề xuất của ông Soner Gonul]