Ответ 1
DateTime значения неизменяемы. Метод Add возвращает новое значение DateTime с добавлением TimeSpan.
Это работает:
Console.WriteLine("A day after the day: " + date.Add(t).ToString());
Я просто хочу добавить 1 день к DateTime
. Поэтому я написал:
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());
Я думал, что результат будет: 2010 04 30- 10:25:00
, но я все еще получаю начальную дату.
Что не так?
DateTime значения неизменяемы. Метод Add возвращает новое значение DateTime с добавлением TimeSpan.
Это работает:
Console.WriteLine("A day after the day: " + date.Add(t).ToString());
Вам нужно изменить строку:
date = date.Add(t);
dtb справедливо в отношении DateTime
неизменяемости. Подумайте об этом так: a DateTime
- это тип значения, который ставит его в ту же категорию, что и int
или double
. Экземпляры этих структур не могут быть изменены; их можно оценивать и копировать.
Рассмотрим этот код:
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 better
Это аналогично:
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 better
Кстати, одна вещь, которая может помочь сделать это яснее, заключается в том, что указанная выше строка d = d.Add(t)
совпадает с d = d + t
. И вы не пишете d + t
в своей собственной строке, как вы бы не пишете i + 2
в своей собственной строке.
A DateTime неизменен, но функции Add и Subtract возвращают вам новые DateTimes.
DateTime tomorrow = DateTime.Now.AddDays(1);
Что случилось с тем, что вы делали date = date.AddDays(1)
?
Результат date.Add(t) - это то, что вам нужно:
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);
возвращает измененное значение DateTime и не изменяет исходный экземпляр, на который вы вызываете метод Add.
DateTime не работает, если DateTime obj datatype - DateTime? который принимает принимает нулевые значения, в таком случае DateTime? dt = DateTime.Now;
DateTime dateObj = new DateTime();
dateObj = Convert.ToDateTime(dt.ToString());
var Month3 = dateObj.AddMonths(3);`