2008年5月21日水曜日

[.NET]年齢の計算

年齢を計算するのは、単純なようで意外とおくが深いのです。.NETの場合、単純な計算であれば、DateTime.Subtractにて算出可能です。コードはこんな感じ。

DateTime dt1 = dateTimePicker1.Value; //基準日
DateTime dt2 = dateTimePicker2.Value; //誕生日
TimeSpan sp = dt1.Subtract(dt2);int age = new DateTime(sp.Ticks).Year -1;


この計算を実施した場合、2/29生まれの人は以下のようになります。
  • うるう年以外の場合、2/28日が誕生日(誕生日が1日前倒し?)
  • うるう年は2/29日が誕生日

ほかの方法がないかと調査してみたところ、年齢を算出する計算式があることがわかりました。なんでも (本日-誕生日)/10000 の小数点以下切捨てで計算できるようです。コードはこんな感じ。

DateTime dt1 = dateTimePicker1.Value; //基準日
DateTime dt2 = dateTimePicker2.Value; //誕生日
long d1 = Convert.ToInt64(dt1.ToString("yyyyMMdd")); //基準日を数値に変換
long d2 = Convert.ToInt64(dt2.ToString("yyyyMMdd")); //誕生日を数値に変換
int age = (int)Math.Floor((double)((d1-d2)/10000));


理屈的に満年齢と考えたとき、うるう年が誕生日の人はうるう年ではない年は3/1が誕生日のような気がします。なんといっても「満」年齢ですからねぇ。
どちらの方式も基本的に誕生日当日の0時0分0秒を持って+1歳する方式なんですが、うるう年が誕生日の人をどのようにするかにより、計算式を切り替えればよい。ということになりますね。

2 件のコメント:

匿名 さんのコメント...
このコメントはブログの管理者によって削除されました。
匿名 さんのコメント...
このコメントはブログの管理者によって削除されました。