3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

生年月日(誕生日)から簡単に年齢出す方法

ITProに載ってました。こちらです。
ちょうどDBに文字列形式で yyyyMMdd 形式で保存された生年月日から年齢を求める必要があったので助かりました。

具体的にはこう書けばいいみたいです。

(今日の日付-誕生日)/10000の小数点以下切捨て。


ということで、VB.Netバージョンのソースです。
DataTableのBirthday列に文字列で yyyyMMdd と保存されるとした場合です。

(CInt(DateTime.Today.ToString("yyyyMMdd")) - CInt(dtbl.Rows(0).Item("Birthday"))) / 10000

ちなみにこれだと小数点形式で帰ってくるので、小数点以下を切り捨てて、文字列で出す方法です。
.ToStringメソッドで書式指定してやります。

((CInt(DateTime.Today.ToString("yyyyMMdd")) - CInt(dtbl.Rows(0).Item("Birthday"))) / 10000).ToString("##")


数値型.ToString()での書式指定は結構便利なものですね。


ただ、この年齢求める方法は業務による年齢定義によって異なるという点が重要です。(たとえば誕生日の前日段階ですでの年齢がインクリメントするような定義など)
そこらへんの細かい話はこちら論議されてました。
まあ、今回作ってるソフトの要件では概算年齢でもかまわないみたいなので、そのへんは深く考えていません。


追伸:
AccessSQLで書くとこうなります。
(生年月日が文字列として "yyyyMMdd" 形式で列に格納されているとします。列名は "Birthday")

int((int(Format(Date(),"yyyymmdd")) - int(Birthday) )/ 10000)