将TimeSpan添加到给定的DateTime

时间:2010-04-29 13:18:45

标签: c# datetime timespan

我只想在DateTime添加1天。所以我写道:

 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 个答案:

答案 0 :(得分:59)

DateTime不可变Add方法会在添加DateTime的情况下返回新的TimeSpan值。

这有效:

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

答案 1 :(得分:16)

您需要更改一行:

date = date.Add(t);

答案 2 :(得分:10)

dtb关于DateTime是不可变的是正确的。可以这样考虑:DateTime是一种值类型,它将其与intdouble放在同一类别中。这些结构的实例无法修改;它们只能被评估和复制。

考虑以下代码:

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一样。

答案 3 :(得分:7)

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

DateTime tomorrow = DateTime.Now.AddDays(1);

答案 4 :(得分:5)

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

答案 5 :(得分: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());

答案 6 :(得分:2)

date.Add(t);

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

答案 7 :(得分:1)

如果DateTime obj数据类型是“DateTime?”,那么DateTime不会工作接受空值,在这种情况下DateTime? dt = DateTime.Now;

        DateTime dateObj = new DateTime();

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

        var Month3 = dateObj.AddMonths(3);`