[Vzhledem k tomu, že není dobré, když budeme pokračovat v komentářích (komentáře budou dlouhé), dám sem jen to, co si myslím, jako řešení]
Chcete-li formátovat dateBuy do formátu, který chcete, měli byste také zadat formát řetězce do ToString()
Tedy místo
dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString();
dát
dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString("yyyy-MM-dd");
Jinak je to možné pro ToString() vytvořit něco jako „2015-10-16 00:00:00 AM“ místo „2015-10-16“
Protože však používáte ParseExact , vstup pro dateBuy2 musí být také ve formátu "yyyy-MM-dd", což maří účel. Můžete zvážit použití DateTimePicker tak, abyste mohli ovládat vstupní formát.
Případně můžete použít DateTime.Parse nebo TryParse (jak navrhl Martheen) místo toho něco takového
try {
DateTime dt = DateTime.Parse(txtDateBuy.Text);
dateBuy = dt.ToString("yyyy-MM-dd");
} catch (Exception exc) {
//wrong format, do something to tell the user
}
Pokud vstup musí být v TextBox raději zadejte try-catch abyste zabránili zhroucení vašeho programu kvůli nesprávně naformátovanému vstupu, pokud použijete Parse .
Kde jako když používáte TryParse můžete jej vložit do if-else místo toho příkaz blok
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
}
Chcete-li získat CultureInfo enum musíte přidat odkaz na System.Globalization
[Upraveno na základě návrhu pana Sonera Gonula]