30

我只想将 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但我仍然得到初始日期。

怎么了?

4

8 回答 8

66

DateTime值是不可变的。Add方法返回一个添加了TimeSpan的新DateTime值。

这有效:

Console.WriteLine("A day after the day: " + date.Add(t).ToString());
于 2010-04-29T13:20:01.333 回答
21

您需要更改一行:

date = date.Add(t);
于 2010-04-29T13:19:53.743 回答
14

dtb 关于DateTime不可变是正确的。可以这样想:aDateTime是一种值类型,它与intor属于同一类别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在自己的行上一样。

于 2010-04-29T13:27:25.120 回答
7

DateTime 是不可变的,但 Add 和 Subtract 函数会返回新的 DateTimes 供您使用。

DateTime tomorrow = DateTime.Now.AddDays(1);
于 2010-04-29T13:20:32.113 回答
6

只是做有什么问题date = date.AddDays(1)

于 2010-04-29T13:19:50.357 回答
5

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());
于 2010-04-29T13:20:22.970 回答
2
date.Add(t);

返回修改后的 DateTime,并且不会更改您调用 Add 方法的原始实例。

于 2010-04-29T13:22:50.320 回答
1

如果 DateTime obj 数据类型为“DateTime?”,则 DateTime 将不起作用 在这种情况下,它接受空值DateTime? dt = DateTime.Now;

        DateTime dateObj = new DateTime();

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

        var Month3 = dateObj.AddMonths(3);`
于 2017-06-14T07:09:23.100 回答