Добавление TimeSpan к указанному DateTime - PullRequest
24 голосов
/ 29 апреля 2010

Я просто хочу добавить 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, но я все еще получаю начальную дату.

Что не так?

Ответы [ 8 ]

59 голосов
/ 29 апреля 2010

DateTime значения неизменны . Метод Add возвращает новое значение DateTime с добавлением TimeSpan .

Это работает:

Console.WriteLine("A day after the day: " + date.Add(t).ToString());
16 голосов
/ 29 апреля 2010

Вам нужно изменить строку:

date = date.Add(t);
10 голосов
/ 29 апреля 2010

dtb верно, что DateTime неизменна. Подумайте об этом так: 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's 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's better

Кстати, одна вещь, которая может помочь прояснить ситуацию, это осознать, что вышеприведенная строка, d = d.Add(t), совпадает с d = d + t И вы не написали бы d + t в отдельной строке, как если бы вы не написали i + 2 в отдельной строке.

7 голосов
/ 29 апреля 2010

DateTime является неизменным, но функции Add и Subtract возвращают новые DateTimes для использования.

DateTime tomorrow = DateTime.Now.AddDays(1);
5 голосов
/ 29 апреля 2010

Результат 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());
5 голосов
/ 29 апреля 2010

Что не так просто делать date = date.AddDays(1)?

2 голосов
/ 29 апреля 2010
date.Add(t);

возвращает измененный DateTime и не изменяет исходный экземпляр, для которого вы вызываете метод Add.

1 голос
/ 14 июня 2017

DateTime не будет работать, если тип данных DateTime obj равен "DateTime?" который принимает пустые значения, в таком случае DateTime? dt = DateTime.Now;

        DateTime dateObj = new DateTime();

        dateObj = Convert.ToDateTime(dt.ToString());

        var Month3 = dateObj.AddMonths(3);`
...