问题
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