31

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?

8 Answers 8

71

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());
Sign up to request clarification or add additional context in comments.

Comments

23

You need to change a line:

date = date.Add(t);

Comments

15

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.

1 Comment

The real answer is always in the comments
7

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

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

Comments

6

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

4 Comments

Still has the same problem - DateTimes are immutable :)
My Delta Time is a TimeSpan. So I can't use AddDays which takes an integer as a parameter.
@Amokrane, if your delta is a timespan I think you should rephrase the question title.
@Amokrane, the larger point remains. .Add(...) returns a new date, it doesn't modify the existing date. You still would use date = date.Add(...
5

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

Comments

2
date.Add(t);

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

Comments

0

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.