👌
[Python] 誕生日から年齢を算出する
誕生日から年齢を算出したい
自分の年齢の計算方法なんて考えたこともありませんでしたが、プログラムで年齢を表示する必要がある時に迷っちゃいますよね。
ということで誕生日から年齢を算出する方法を解説します。
[解決策] サンプルコード
解決するためのサンプルコードはこちらです。誕生日の年、月、日を引数にして年齢を返します。
import datetime
def age(year, month, day):
today = datetime.date.today()
birthday = datetime.date(year, month, day)
return (int(today.strftime("%Y%m%d")) - int(birthday.strftime("%Y%m%d"))) // 10000
[解説] なぜこれで良いのか
パッと見でこれで良いのか?と思う方もいると思うので解説します。
誕生日を求める基本的な考え方
まずは誕生日の基本的な求め方を考えます。
- 現在の年から生まれた年を引いて、それを基準にする
- その年の誕生日を迎えていない場合は、基準から1を引く
普通に生活していて年齢の計算方法なんて意識しないですが、手順に書き起こすとこんな感じです。
例えば私は1995年生まれなので、2020年には25歳になりますが、誕生日がまだならば1を引いて24歳です。
コードに書き起こした手順を分解
以下の部分の解説をします。
(int(today.strftime("%Y%m%d")) - int(birthday.strftime("%Y%m%d"))) // 10000
todayとbirthdayはそれぞれ、今日と誕生日を表します。
- それぞれの日を%Y%m%dの形式にします。(例:1995年6月12日→19950612)
- %Y%m%d形式にした日付を整数型に変換します。
- 今日の日付の数値から、誕生日の数値をひきます。(例:20200721 - 19950612)
- 最後に残った値を10,000で割ります。(※切り捨て)
以上です。
例を見ながら確認する
例1:誕生日を迎えている場合
- 現在 :2020年7月21日
- 誕生日:1995年6月12日
( 20200721 - 19950612) / 10,000
= 250,609 / 10,000
= 25
例2:誕生日より前の場合
- 現在 :2020年5月21日
- 誕生日:1995年6月12日
( 20200521 - 19950612) / 10,000
= 249,909 / 10,000
= 24
この方法で算出できてしまう理由
よくできた計算式ですが、自分はぱっと見で本当にこれで良いの?って思ったので一応解説します。
%m%dの数値は、基本的に1月1日から12月31日まで、昇順に並びます。
そのため先ほどの例の通りで、誕生日を過ぎていない場合は、1,000の桁までがマイナスになるので、10,000以上の桁を繰り下げることになり、1歳分引くのと実質同じ処理になります。
反対に、誕生日を過ぎていれば、10,000以上の桁を繰り下げる必要がないので、単純に年の差が年齢になります。
まとめ
この方法はPythonに限らずどの言語で実装できるので参考にしてみてください。
Discussion