将TimeSpan添加到给定的DateTime

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

怎么了?

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

这有效:

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

您需要更改一行:

 date = date.Add(t); 

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

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 obj数据类型是“DateTime?”,DateTime将无法工作 接受null值,在这种情况下DateTime? dt = DateTime.Now; DateTime? dt = DateTime.Now;

  DateTime dateObj = new DateTime(); dateObj = Convert.ToDateTime(dt.ToString()); var Month3 = dateObj.AddMonths(3);`