[Ponieważ nie jest dobrze, jeśli będziemy kontynuować w komentarzach (komentarze będą długie), po prostu przedstawię tutaj to, co myślę jako rozwiązanie]
Aby sformatować dateBuy
do formatu, który chcesz, powinieneś również umieścić format ciągu w ToString()
Oznacza to, że zamiast
dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString();
umieścić
dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString("yyyy-MM-dd");
W przeciwnym razie możliwe jest dla ToString()
stworzyć coś w stylu „2016-10-16 12:00:00 AM” zamiast „2015-10-16”
Jednak ponieważ używasz ParseExact
, dane wejściowe dla dateBuy2
musi być również w formacie „rrrr-MM-dd”, co jest sprzeczne z celem. Możesz rozważyć użycie DateTimePicker
tak, że możesz kontrolować format wejściowy.
Alternatywnie możesz użyć DateTime.Parse
lub TryParse
(jak sugeruje Martheen), zamiast tego coś takiego
try {
DateTime dt = DateTime.Parse(txtDateBuy.Text);
dateBuy = dt.ToString("yyyy-MM-dd");
} catch (Exception exc) {
//wrong format, do something to tell the user
}
Jeśli dane wejściowe muszą znajdować się w TextBox
lepiej umieść try-catch
aby zapobiec awariom programu z powodu pobrania niepoprawnie sformatowanych danych wejściowych, jeśli używasz Parse
.
Gdzie tak, jakbyś używał TryParse
możesz umieścić go w if-else
zamiast tego instrukcja blokowa
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
}
Aby uzyskać CultureInfo
enum
musisz dodać odniesienie do System.Globalization
[Edytowane zgodnie z sugestią pana Sonera Gonula]