2

2 つの日付が与えられた場合、うるう年に該当する 2 つの日付の間の日数を計算する最良の方法は何ですか。

たとえば、d1 = 12/1/2007 および d2 = 1/31/2008 の場合、d1 と d2 の間の合計日数は 62 になり、うるう年に該当する日数は 31 になります。

別の例として、d1 = 12/1/2007 および d2 = 6/30/2012 の場合、d1 と d2 の間の合計日数は 1674 になり、うるう年に該当する日数は 548 になります。

特定の年がうるう年かどうかを計算する関数と、2 つの日付間の日数を計算する関数が既にあります。

誰かが Delphi (Pascal) または C/C++/C# でそのようなアルゴリズムを持っているなら、それは大歓迎です。どんな提案や支援も素晴らしいでしょう。

4

3 に答える 3

0

- の関数を使用した擬似コード バージョンを次に示しますis_leap_year, days_between。コメンターが指摘したように、これらは正しく書くのが難しい関数です。

int leap_year_days_between(Date d1, Date d2) {

   if (d1.year == d2.year) {
       if (is_leap_year(d1.year) { return days_between(d1,d2); } 
       else { return 0; }
    }
    else {
      Date last_day_in_year(12, 31, d1.year);
      int count=0;
      Date tmp = d1;
      while (tmp.year < d2.year) {
         if ( is_leap_year(tmp.year) ) {
             count += days_between(tmp,last_day_in_year);
          }
          tmp = (1, 1, tmp.year+1);
      }
      if ( is_leap_year(d2.year) ) {
         count += days_between(tmp, d2);
      }

     }
}
于 2009-07-17T00:05:03.007 に答える
0

単純なアプローチは次のようになります。

開始年を確認してください。うるう年の場合は、現在の日から 12 月 31 日までの日数を数えます。そうでない場合は、開始年が終了年と一致するまで、年を 1 増やします。次に、年を確認します。うるう年の場合は日数のカウントを開始し、そうでない場合は年を増やします。現在の年と終了の年が同じになったら、現在の (== 終了の) 年がうるう年かどうかを確認します。そうである場合は、1 月から最後の月までの日数を数えます。そうでない場合は、アルゴリズムが壊れます。現在の月が終了月になったら、日数を数えます。

于 2009-07-16T23:38:26.180 に答える