Adding a TimeSpan to a given DateTime

51,338

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

Solution 2

You need to change a line:

date = date.Add(t);

Solution 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.

Solution 4

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

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

Solution 5

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

Share:
51,338
Amokrane Chentir
Author by

Amokrane Chentir

Updated on June 14, 2020

Comments

  • Amokrane Chentir
    Amokrane Chentir almost 4 years

    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?

  • BlueRaja - Danny Pflughoeft
    BlueRaja - Danny Pflughoeft about 14 years
    Still has the same problem - DateTimes are immutable :)
  • Amokrane Chentir
    Amokrane Chentir about 14 years
    My Delta Time is a TimeSpan. So I can't use AddDays which takes an integer as a parameter.
  • Klaus Byskov Pedersen
    Klaus Byskov Pedersen about 14 years
    @Amokrane, if your delta is a timespan I think you should rephrase the question title.
  • Anthony Pegram
    Anthony Pegram about 14 years
    @Amokrane, the larger point remains. .Add(...) returns a new date, it doesn't modify the existing date. You still would use date = date.Add(...
  • KyleMit
    KyleMit about 6 years
    The real answer is always in the comments