30

に1日を追加したいだけですDateTime。だから私は書いた:

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

結果は次のようになると思いました:2010 04 30- 10:25:00しかし、私はまだ最初の日付を取得しています。

どうしたの?

4

8 に答える 8

66

DateTime値は不変です。Addメソッドは、TimeSpanが追加された新しいDateTime返します。

これは機能します:

Console.WriteLine("A day after the day: " + date.Add(t).ToString());
于 2010-04-29T13:20:01.333 に答える
21

行を変更する必要があります:

date = date.Add(t);
于 2010-04-29T13:19:53.743 に答える
14

dtbはDateTime不変であることについて正しいです。このように考えてください。aは値型であり、またはDateTimeと同じカテゴリに分類されます。これらの構造のインスタンスは変更できません。それらは評価およびコピーのみが可能です。intdouble

このコードを考えてみましょう:

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

これは次のようなものです。

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

ちなみに、これを明確にするのに役立つかもしれないことの1つは、上記の行、d = d.Add(t)がと同じであることを理解することd = d + tです。また、独自の行に書き込むd + tのと同じように、独自の行に書き込むこともありませんi + 2

于 2010-04-29T13:27:25.120 に答える
7

DateTimeは不変ですが、Add関数とSubtract関数は、使用できる新しいDateTimeを返します。

DateTime tomorrow = DateTime.Now.AddDays(1);
于 2010-04-29T13:20:32.113 に答える
6

ただやることの何が問題になっていdate = date.AddDays(1)ますか?

于 2010-04-29T13:19:50.357 に答える
5

date.Add(t)の結果は、あなたが求めているものです。

 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());
于 2010-04-29T13:20:22.970 に答える
2
date.Add(t);

変更されたDateTimeを返し、Addメソッドを呼び出した元のインスタンスは変更しません。

于 2010-04-29T13:22:50.320 に答える