[Já que não é bom se continuarmos nos comentários (os comentários serão longos), vou apenas colocar o que eu acho como solução aqui]
Para formatar
dateBuy para o formato que você deseja, você também deve colocar o formato da string no ToString() Ou seja, em vez de
dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString();
por
dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString("yyyy-MM-dd");
Caso contrário, é possível que o
ToString() para produzir algo como "2015-10-16 12:00:00 AM" em vez de "2015-10-16" No entanto, como você usa
ParseExact , a entrada para o dateBuy2 também deve estar no formato "aaaa-MM-dd" que anula o propósito. Você pode considerar usar DateTimePicker para que você possa controlar o formato de entrada. Alternativamente, você pode usar
DateTime.Parse ou TryParse (como sugerido por Martheen) em vez disso, algo assim try {
DateTime dt = DateTime.Parse(txtDateBuy.Text);
dateBuy = dt.ToString("yyyy-MM-dd");
} catch (Exception exc) {
//wrong format, do something to tell the user
}
Se a entrada tiver que estar no
TextBox é melhor você colocar try-catch para evitar que seu programa falhe por receber entradas formatadas incorretamente se você usar Parse . Onde como se você usasse
TryParse você pode colocá-lo em if-else instrução de bloco em vez disso 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
}
Para obter
CultureInfo enum você precisa adicionar referência a System.Globalization [Editado após sugestão dada pelo Sr. Soner Gonul]