C#/.NET には、、などがTimeSpan
ありますが、合計月差の計算式がわかりません。月ごとの日数の変化や閏年が私を混乱させ続けています。 を取得するにはどうすればよいですか?TotalDays
TotalMinutes
TotalMonths
編集より明確に説明できず申し訳ありません。実際にこれを取得できないことはわかっていますが、 を使用すると、私が探していたものを表現するのに良い例になるとTimeSpan
思いました...ただし、合計月数を取得しようとしています。TotalDays
TotalMinutes
例: 2009 年 12 月 25 日 - 2009 年 10 月 6 日 = 合計 2 か月。10 月 6 日から 11 月 5 日までは 0 か月。11 月 6 日は 1 か月。12 月 6 日は 2 か月
ベストアンサー1
TimeSpan
「月」は可変の測定単位なので、からそれを得ることはできません。自分で計算する必要があり、どのように機能させたいかを正確に把握する必要があります。
たとえば、 と のような日付は1か月の差を返すべきでしょうかJuly 5, 2009
、August 4, 2009
それとも0か月の差を返すべきでしょうか。1か月を返すべきだとしたら、 と はどうでしょうJuly 31, 2009
かAugust 1, 2009
。それ1 か月ですか? 単に日付の値が異なるだけですかMonth
、それとも実際の時間の範囲に関連していますか? これらすべてのルールを決定するロジックは簡単ではないため、独自のロジックを決定して適切なアルゴリズムを実装する必要があります。
必要なのが単に月の違いだけであり、日付の値を完全に無視する場合は、次のようにします。
public static int MonthDifference(this DateTime lValue, DateTime rValue)
{
return (lValue.Month - rValue.Month) + 12 * (lValue.Year - rValue.Year);
}
これは相対的な差を返すことに注意してください。つまり、rValue
が より大きい場合lValue
、戻り値は負になります。絶対的な差が必要な場合は、次のようにします。
public static int MonthDifference(this DateTime lValue, DateTime rValue)
{
return Math.Abs((lValue.Month - rValue.Month) + 12 * (lValue.Year - rValue.Year));
}