[Puisque ce n'est pas bien si on continue dans les commentaires (les commentaires vont être longs), je vais juste mettre ici ce que je pense comme solution]
Pour formater dateBuy au format que vous voulez, vous devez également mettre le format de chaîne dans le ToString()
Autrement dit, au lieu de
dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString();
mettre
dateBuy = (DateTime.ParseExact(dateBuy2, "yyyy-MM-dd", null)).ToString("yyyy-MM-dd");
Sinon, c'est possible pour le ToString() pour produire quelque chose comme "2015-10-16 00:00:00 AM" au lieu de "2015-10-16"
Cependant, puisque vous utilisez ParseExact , l'entrée pour le dateBuy2 doit également être au format "aaaa-MM-jj", ce qui va à l'encontre de l'objectif. Vous pouvez envisager d'utiliser DateTimePicker de sorte que vous puissiez contrôler le format d'entrée.
Alternativement, vous pouvez utiliser DateTime.Parse ou TryParse (comme suggéré par Martheen) à la place, quelque chose comme ça
try {
DateTime dt = DateTime.Parse(txtDateBuy.Text);
dateBuy = dt.ToString("yyyy-MM-dd");
} catch (Exception exc) {
//wrong format, do something to tell the user
}
Si l'entrée doit être dans le TextBox tu ferais mieux de mettre try-catch pour éviter que votre programme ne plante pour avoir pris une entrée mal formatée si vous utilisez Parse .
Où comme si vous utilisiez TryParse vous pouvez le mettre dans if-else bloquer l'instruction à la place
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
}
Pour obtenir CultureInfo enum vous devez ajouter une référence à System.Globalization
[Modifié après suggestion donnée par M. Soner Gonul]