ブログに戻る
2 min read

Python で年齢を計算する方法 (datetime と dateutil の例)

Python で生年月日から年齢を計算する方法を学びます。完了年数、特定の日付の年齢、うるう年やタイムゾーンなどのよくある落とし穴が含まれます。

Python で年齢を計算する方法 (datetime と dateutil の例)

Python で年齢を計算する方法 (datetime と dateutil の例)

必要な場合はPythonで年齢を計算する生年月日から正しく判断する必要がある主な点は、年齢の定義です。ほとんどのアプリでは年齢の定義が必要です。完成年数(完全な誕生日)、年の違いだけではありません。

1) 完了年数 (安全な定義)

これは、生年月日 (DOB) からの満年数を返します。今年まだ誕生日が発生していない場合は 1 が減算されます。

from datetime import date

def age_years(dob: date, as_of: date | None = None) -> int:
    if as_of is None:
        as_of = date.today()
    years = as_of.year - dob.year
    before_birthday = (as_of.month, as_of.day) < (dob.month, dob.day)
    return years - 1 if before_birthday else years

print(age_years(date(2000, 10, 5), date(2026, 2, 26)))

2) 特定の日付時点での年齢 (今日だけではありません)

保険の価格設定、資格の確認、学校の閉鎖、レポートなど、多くのユースケースでは「現在」の日付が必要です。上記の関数はすでにそれをサポートしていますas_of

3) 正確なスタイル出力 (年と月)

「25 年 4 か月」のような出力が必要な場合は、次を使用します。dateutil.relativedelta(月の長さを正しく処理します)。

from datetime import date
from dateutil.relativedelta import relativedelta

def age_ym(dob: date, as_of: date | None = None):
    if as_of is None:
        as_of = date.today()
    rd = relativedelta(as_of, dob)
    return rd.years, rd.months

print(age_ym(date(2000, 10, 5), date(2026, 2, 26)))

4) よくある落とし穴 (およびその回避方法)

  • 閏日の誕生日:うるう年以外で 2 月 29 日をどのように扱うかを決定します。多くのシステムは 2 月 28 日または 3 月 1 日を使用します。ライブラリの動作は重要なので、テストしてください。
  • 日時とタイムゾーン:DOBの場合、優先しますdate以上datetime。日時を使用する必要がある場合は、最初に同じタイムゾーンに正規化してください。
  • 将来の DOB または欠損値:マイナスの経過時間やクラッシュを避けるために入力を検証します。

クイックチェック(コードなし)

1 つの結果だけをすぐに必要とする場合は、オンライン計算機を使用してください。オンラインで年齢を計算する

関連ガイド

よくある質問

(today.year - dob.year) が時々間違っているのはなぜですか?

なぜなら、誕生日が今年すでに起こったかどうかは無視されるからです。誕生日の前に 1 を引く必要があります。

生年月日には日時または日付を使用する必要がありますか?

使用date可能であれば。 DOB は暦日であり、タイム ゾーンにより日付が日をまたいでずれる可能性があります。