1

担当している担当者がいて、最後の機能で行き詰まっています。

関数 void Increment(int numDays = 1) を使用します

この関数は、引数で指定された暦日数だけ日付を進めます。パラメータのデフォルト値は 1 日です。例:

Date d1(10, 31, 1998); // Oct 31, 1998
Date d2(6, 29, 1950); // June 29, 1950

d1.Increment(); // d1 is now Nov 1, 1998
d2.Increment(5); // d2 is now July 4, 1950

これを行う方法がわかりません。

void Date::Increment(int numDays = 1)

私は立ち往生しています、++演算子によって関数をインクリメントするように指示する方法を知っていますが、月の最後の日を最初にインクリメントする関数を取得する必要があるとき、または最後に終了する関数を取得する必要があるときに混乱しますたとえば、その月の日付。10 月 31 日から 11 月 1 日、または 6 月 29 日から 7 月 4 日。

4

3 に答える 3

1

各月の日数のリスト (または配列) を保存する必要があります。現在の日付に加算numDaysしてこれよりも大きくなる場合は、月もインクリメントする必要があります。

たとえば、2010 年 3 月 29 日を表す日付オブジェクトがあります。呼び出しIncrement(4)て day 変数に 4 を追加すると、2010 年 3 月 33 日になります。3 月の日数を調べて、31 であることがわかります (例: daysInMonth[3] == 31)。33 は 31 よりも大きいため、33 から 31 を引いて月を増やす必要があり、最終的に 2010 年 4 月 2 日になります。

うるう年の 2 月 (4 で割り切れ、400 で割り切れる場合を除き、100 で割り切れない年) の 2 月と、12 月末を過ぎてインクリメントする場合は、特別な処理が必要になります。

于 2010-09-21T00:57:54.687 に答える
0

まず、次のような関数を作成します

 int numDaysSinceBeginning( Date );

これは、既知の日付 (1900 年 1 月 1 日など) から特定の日付までの経過日数をカウントします。

次に、その日のデルタを日付に変換する別の関数を作成します

Date createDateWithDelta( int );

あなたの例から、

Date d2(6, 29, 1950); // June 29, 1950

int d2Delta = numDaysSinceBeginnning( d2 );

Date d2Incremented = createDateWithDelta( d2Delta + 5 ); // d2Incremented is July 4, 1950
于 2010-09-21T01:35:54.440 に答える
0

30 日には 9 月、4 月、6 月、11 月があります。残りは 31 日ですが、2 月はうるう年 (4 年ごとで、2008 年が最後の年) を除いて 28 日で、29 日です。

これで十分です。

于 2010-09-21T00:52:23.220 に答える