基準となる日から今日までの経過年数を算出する

注意:
この文書は以前「.NETでいきまっしょい!」で公開していたものですが、公開以降メンテナンスされていません。 今や古い情報となった内容が記載されている場合があるのでご注意ください。
VB.NET
001
002
003
004
005
006
007
008
009
010
011
012
Dim dtmToday As DateTime = DateTime.Now
Dim dtmSomeday As New DateTime(1987, 5, 7)

Dim intYearsPassage As Integer = dtmToday.Year - dtmSomeday.Year

Dim dtmSamedayInThisYear As New DateTime(dtmToday.Year, dtmSomeday.Month, dtmSomeday.Day)

If dtmSamedayInThisYear > dtmToday Then intYearsPassage -= 1

Console.WriteLine("今日: " + dtmToday.ToShortDateString())
Console.WriteLine("基準となる日: " + dtmSomeday.ToShortDateString())
Console.WriteLine("経過年数: " + intYearsPassage.ToString())
C#
001
002
003
004
005
006
007
008
009
010
011
012
DateTime dtmToday   = DateTime.Now;
DateTime dtmSomeday = new DateTime( 1987, 5, 7 );

int iYearsPassage = dtmToday.Year - dtmSomeday.Year;

DateTime dtmSamedayInThisYear = new DateTime( dtmToday.Year, dtmSomeday.Month, dtmSomeday.Day );

if ( dtmSamedayInThisYear > dtmToday ) iYearsPassage -= 1;

Console.WriteLine( "今日: " + dtmToday.ToShortDateString() );
Console.WriteLine( "基準となる日: " + dtmSomeday.ToShortDateString() );
Console.WriteLine( "経過年数: " + iYearsPassage.ToString() );
出力例
今日: 2003/03/08
基準となる日: 1987/05/07
経過年数: 15
Press any key to continue

 DateTime同士の減算では、戻り値がTimeSpanとなるが、TimeSpanには年数を計算するプロパティがない。 経過した日付から求められそうだが、閏年などの処理がめんどくさい。 そこで、二つの日付から年数のみの差を求め、日付が過ぎているか否かで経過年数を補正する。