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?
You need to change a line:
date = date.Add(t);
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.
A DateTime is immutable, but the Add and Subtract functions return new DateTimes for you to use.
DateTime tomorrow = DateTime.Now.AddDays(1);
What is wrong with just doing date = date.AddDays(1)
?
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());
date.Add(t);
returns a modified DateTime and does not change the original instance on which you call the Add method on.
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