Adding a TimeSpan to a given DateTime

对着背影说爱祢 提交于 2019-12-09 14:04:09

问题


I just want to add 1 day to a DateTime. So I wrote:

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

I thought the result would be: 2010 04 30- 10:25:00 but I'm still getting the initial date.

What's wrong?


回答1:


DateTime values are immutable. The Add method returns a new DateTime value with the TimeSpan added.

This works:

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



回答2:


You need to change a line:

date = date.Add(t);



回答3:


dtb is right about DateTime being immutable. Think of it this way: a DateTime is a value type, which puts it in the same category as int or double. Instances of these structures cannot be modified; they can only be evaluated and copied.

Consider this code:

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

This is analogous to:

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

By the way, one thing that might help make this clearer is realizing that the above line, d = d.Add(t), is the same as d = d + t. And you wouldn't write d + t on its own line, just like you wouldn't write i + 2 on its own line.




回答4:


A DateTime is immutable, but the Add and Subtract functions return new DateTimes for you to use.

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



回答5:


What is wrong with just doing date = date.AddDays(1)?




回答6:


The result of date.Add(t) is what you're after:

 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:


date.Add(t);

returns a modified DateTime and does not change the original instance on which you call the Add method on.




回答8:


DateTime wont work if DateTime obj datatype is "DateTime?" which takes accepts null values, in such case DateTime? dt = DateTime.Now;

        DateTime dateObj = new DateTime();

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

        var Month3 = dateObj.AddMonths(3);`


来源:https://stackoverflow.com/questions/2737595/adding-a-timespan-to-a-given-datetime

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!