2011-07-14 8 views
0

可能性の重複:私は開始日と終了日与えられた年と月での差を計算するにはどうすればよい
Calculate Years, Months, weeks and Daysはどのように開始と終了を指定した年と月での差を計算行う

こんにちは

交流#2.0プロジェクトに取り組んで

と私は開始日と終了日

私は

 public void CalculateYearsAndMonths(DateTime startDate, 
              DateTime endDate, 
              out int years, 
              out int months) 
     { 
      int years=0; 
      int months=0; 

      //???? 
     } 

のような機能を考えていた与えられた年と月での差を計算する必要があります助言がありますか?

+1

関連:http://stackoverflow.com/questions/3286461/how-to-計算 - 実際の月差 - 暦年非近似 - の間 –

答えて

2

:しかし、DateTime.MinValueに基づいている場合、あなたは次のように使用することができます。例えば。 1972年2月29日と28日、1973年2月には、0年11か月を返します。ところで

if (endDate < startDate) 
{ 
    DateTime temp = endDate; 
    endDate = startDate; 
    startDate = temp; 
} 

years = endDate.Year - startDate.Year; 
months = endDate.Month - startDate.Month; 
int days = endDate.Day - startDate.Day; 
if (days < 0) months--; 
if (months < 0) 
{ 
    months += 12; 
    years--; 
} 

、あなたはアウトパラメータを正しく動作させるために2つの行を削除する必要があります。

int years=0; 
int months=0; 
+0

ありがとうございます。期待どおりに動作します。 – user9969

0
int years = endDate.Year - startDate.Year; 
int months = endDate.Month - startDate.Month; 

あなたが上記を試すことができます、動作するはずです。

+0

ありがとう、しかし、私はTotalyearsを持っていないようです – user9969

+0

申し訳ありませんが、私が投稿したとすぐに私はそれがエクステンションクラスだったことを思い出しましたが、年と月を得るために上記を使用してください。 – Jethro

0

これは、月数と年数をどのようにカウントするかによって異なります。 1月25日〜2月1日= 1か月、12月30日〜1月1日= 1年)、または2つの間の平均サイズ月数/年数(たとえば、月29日または年365日)日付?

のTimeSpanは、あなたが(例えば日分)あなたのすべての固定サイズの期間を与える引いた日付で取得することができますつながる

は、月と年は難しいことができ、なぜ周りのいくつかの詳細については、このquestionを参照してください。

+0

私は見ています。正直ではありません。私が境界線を気にしなかったなら、どうやってそれをやりますか? – user9969

+0

境界を越えた期間や平均期間に興味がありますか? –

+0

ところで - 私は賛否が下がった - 必要に応じて質問の詳細情報を得る答えに向かって努力しています。 –

0

これは何か?

 var end = endDate.Year + endDate.Month/12.0; 
     var start = startDate.Year + startDate.Month/12.0; 

     var years = (int)(end - start); 
     var months = (end - start) * 12; 

あなたがヶ月を丸めるしたいかどうかわからない...このことができます

希望、

ジョン

1

私は毎月もらうよう月数があいまいだと思います異なる日数。このコードは、2つの日付の間の日数が365日ある場合でも動作します

 TimeSpan difference = endDate - startDate; 

     DateTime age = DateTime.MinValue + difference; 

     // Min value is 01/01/0001 

     int ageInYears = age.Year - 1; 
     int ageInMonths = age.Month - 1; 
     int ageInDays = age.Day - 1; 

     Console.WriteLine("{0}, {1}, {2}", ageInYears, ageInMonths, ageInDays); 
+0

ご返信ありがとうございます。なぜ-1?あなたのロジックを理解しようとしています。ありがとう – user9969

+0

コメントを見ることができるので、最小値は01/01/0001から始まります。合計を計算するには0/0/0として扱う必要があります。 DateTime.MinValueの代わりに、 'new DateTime(0,0,0)'を使うことができます。引数は年、月、日の順序で並べ替えられ、1を引く必要はありません。 –

関連する問題