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