2010-04-29 4 views
21

Я просто хочу добавить 1 день к DateTime. Так что я написал:Добавление TimeSpan к заданному дате времени

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

Что случилось?

ответ

51

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

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

Console.WriteLine("A day after the day: " + date.Add(t).ToString()); 
+0

Спасибо. Решила мою проблему! –

+0

, возможно, вы захотите принять этот ответ. –

+0

Да.Я буду. У меня просто есть ограничение, SO не позволяет мне делать это до 11 минут. Не знаю, почему .. –

5

Что не так с тобой date = date.AddDays(1)?

+0

Тем не менее та же проблема - DateTimes неизменны :) –

+0

Моя Delta Time является TimeSpan. Поэтому я не могу использовать AddDays, который принимает целое число в качестве параметра. –

+0

@Amokrane, если ваша дельта - это промежуток времени, я думаю, вы должны перефразировать заголовок вопроса. –

15

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

date = date.Add(t); 
5

Результат date.Add (т) является то, что вы после:

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()); 
7

Задан неизменен, но складывают и вычитают функции возвращают новый DateTimes для вас.

DateTime tomorrow = DateTime.Now.AddDays(1); 
2
date.Add(t); 

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

8

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'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 на своей собственной линии.

1

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

 DateTime dateObj = new DateTime(); 

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

     var Month3 = dateObj.AddMonths(3);`