2016-08-30 8 views
0

私はdateTime変数を持っています。日付が月の最終日ではなく、前回の日の前日であれば、1日追加したいと思います。私はその実行がendDate.AddDays(1);しかしendDateに行く見ることができますデバッガから日に日を追加する

endDate = newDate(2016, 8, 30);//create date for test 
if (DateTime.DaysInMonth(endDate.Year, endDate.Month) == (int)31 && endDate.Day == (int)30) 
    endDate.AddDays(1); 

AddDays機能が動作しないかのように(30.08.2016)まだ同じです。 なぜ誰も知っていますか?

+0

は、それはあなたがたDateTime構造体であり、不変であるとして割り当てる必要があり、結果を返します。 'endDate = endDate.AddDays(1);'また、[ドキュメント](https://msdn.microsoft.com/en-us/library/system.datetime.adddays(v = vs.110))をチェックアウトした場合。 aspx)メソッドがDateTimeインスタンスを返すことがわかります。 – Igor

+0

終了日の更新日を割り当てることがありません –

+0

ありがとう、私の間違い。私はドキュメントでそれを逃してしまった。私は主に、同じ変数が同じ変数で動作し、自動的にそのことを念頭に置いた他の言語で動作します。 – Simon

答えて

4

AddDaysは日付を変更しませんが、追加された日数で新しい日付を返します。だから、変更するendDateのためにあなたはそれを関数の出力を割り当てる必要があります。

var endDate = new DateTime(2016, 8, 30); 
endDate = endDate.AddDays(1); 
+0

@JamesThorpe - ya :)入力 –

+0

これを再考したいと思うかもしれません。すべての月に31日があるわけではありません。 – ThePerplexedOne

0

それはあなたがたDateTime構造体であり、不変であるとして割り当てる必要があり、結果を返します。また、the documentationをチェックアウトした場合、メソッドがDateTimeインスタンスを返すことがわかります。

endDate = endDate.AddDays(1); 

論理については、月の最終日の前の日であれば1増分します。あなたが今持っていることは間違っていると、より良い、このように書くことができます。

// only increment if one day before last day of month 
if ((DateTime.DaysInMonth(endDate.Year, endDate.Month) - 1) == endDate.Day) 
    endDate = endDate.AddDays(1); // assign the returned value 

が最後の日からその結果を取り、月の最後の日の前の日を取得するには、1を引きます。それがあなたの日付の現在の月の日と等しい場合は、1ずつ増加します。

0

すべての月が31日間であるわけではありません。

ここでは、コードの更新部分です:

var endDate = new DateTime(2017, 2, 27);//create date for test 
    var daysInMonth = DateTime.DaysInMonth(endDate.Year, endDate.Month); 
    if(endDate.Day == daysInMonth - 1) 
     endDate = endDate.AddDays(1); 
関連する問題