DateTime dt1 = dateTimePicker1.Value; //基準日
DateTime dt2 = dateTimePicker2.Value; //誕生日
TimeSpan sp = dt1.Subtract(dt2);int age = new DateTime(sp.Ticks).Year -1;
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));
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 件のコメント:
コメントを投稿