• 2 min read
如何在 Python 中计算年龄(datetime 和 dateutil 示例)
了解如何在 Python 中根据出生日期计算年龄。包括完成年份、截至特定日期的年龄以及闰年和时区等常见陷阱。
如何在 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 或缺失值:验证输入以避免负老化或崩溃。
快速检查(无代码)
如果您只需要快速得到一个结果,请使用在线计算器:在线计算年龄。
相关指南
常问问题
为什么 (today.year - dob.year) 有时会出错?
因为它忽略了今年的生日是否已经发生。您必须在生日之前减 1。
我应该使用日期时间还是日期作为出生日期?
使用date如果可能的话。 DOB 是一个日历日,时区可以在几天内改变日期时间。