[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]