Je veux juste ajouter 1 jour à un DateTime
. J'ai donc écrit:
DateTime date = new DateTime(2010, 4, 29, 10, 25, 00);
TimeSpan t = new TimeSpan(1, 0, 0, 0);
date.Add(t);
Console.WriteLine("A day after the day: " + date.ToString());
Je pensais que le résultat serait: 2010 04 30- 10:25:00
mais je reçois toujours la date initiale.
Qu'est-ce qui ne va pas?
Vous devez changer de ligne:
date = date.Add(t);
dtb a raison sur le fait que DateTime
est immuable. Pensez-y de cette façon: un DateTime
est un type de valeur, ce qui le place dans la même catégorie que int
ou double
. Les instances de ces structures ne peuvent pas être modifiées; ils ne peuvent être évalués et copiés.
Considérez ce code:
int i = 4;
i + 2; // does not compile, but what if it did?
// would i become 6? clearly not --
// i + 2 expresses a NEW value, which can
// be copied somewhere
i = i + 2; // there we go -- that's better
Ceci est analogue à:
DateTime d = DateTime.Now;
TimeSpan t = TimeSpan.FromDays(1.0);
d.Add(t); // compiles (because AddDays is a function),
// but is really the same as i + 2 above
d = d.Add(t); // that's better
Soit dit en passant, une chose qui pourrait aider à rendre cela plus clair est de réaliser que la ligne ci-dessus, d = d.Add(t)
, est la même que d = d + t
. Et vous n'écririez pas d + t
Sur sa propre ligne, tout comme vous n'écririez pas i + 2
Sur sa propre ligne.
Un DateTime est immuable, mais les fonctions Ajouter et Soustraire renvoient de nouveaux DateTimes à utiliser.
DateTime tomorrow = DateTime.Now.AddDays(1);
Quel est le problème avec simplement faire date = date.AddDays(1)
?
Le résultat de date.Add (t) est ce que vous recherchez:
DateTime date = new DateTime(2010, 4, 29, 10, 25, 00);
TimeSpan t = new TimeSpan(1, 0, 0, 0);
// The change is here, setting date to be the *new* date produced by calling Add
date = date.Add(t);
Console.WriteLine("A day after the day: " + date.ToString());
date.Add(t);
renvoie un DateTime modifié et ne change pas l'instance d'origine sur laquelle vous appelez la méthode Add.
DateTime ne fonctionnera pas si le type de données obj DateTime est "DateTime?" qui accepte les valeurs nulles, dans ce cas DateTime? dt = DateTime.Now;
DateTime dateObj = new DateTime();
dateObj = Convert.ToDateTime(dt.ToString());
var Month3 = dateObj.AddMonths(3);`