You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android(Java) 如何根据出生日期(DOB)与出生时间计算年龄

Android Java 基于选择的日期计算年龄实现方案

你已经从DatePicker、TimePicker拿到了选择的日期、时间返回值,计算年龄核心是处理好日期组件的月份起始规则,避开手动计算时间差的坑,下面给出两种可直接复用的实现:

前置说明

  • DatePicker回调返回的月份值范围是0-11,对应自然月1-12月,不同时间API对月份的计数规则不一样,写代码的时候一定要对齐规则,不然会出现月份差1的问题
  • 常规场景下计算周岁年龄只需要用到DatePicker返回的年、月、日三个值,TimePicker返回的时、分仅在需要计算精确到时分的年龄差时使用

方案1:java.time API实现(官方推荐,无逻辑漏洞)

Android 8.0(API26)及以上原生支持该API,低版本可以通过开启Java 8+ API desugaring支持,是目前最稳妥的实现方式,自动处理闰年、大小月、时区等边界场景:

// 替换成你自己从DatePicker回调中拿到的三个值
int selectYear = datePicker.getYear();
// 注意:LocalDate的月份是1-12计数,DatePicker返回的月份是0起始,这里必须+1
int selectMonth = datePicker.getMonth() + 1;
int selectDay = datePicker.getDayOfMonth();

// 构造出生日期对象
LocalDate birthDate = LocalDate.of(selectYear, selectMonth, selectDay);
LocalDate today = LocalDate.now();
// 计算两个日期之间的完整年差,就是日常所说的周岁
int age = Period.between(birthDate, today).getYears();

如果需要计算精确到时分的年龄,可以把TimePicker拿到的小时、分钟拼接为LocalDateTime对象,用Duration.between()计算时间差即可,普通业务场景不需要。


方案2:Calendar实现(全版本兼容,无需额外适配)

如果不想做desugaring适配,可以用系统原生的Calendar类实现,注意Calendar本身的月份也是0起始,和DatePicker返回值规则一致,不需要额外偏移:

Calendar birthCalendar = Calendar.getInstance();
birthCalendar.set(Calendar.YEAR, datePicker.getYear());
birthCalendar.set(Calendar.MONTH, datePicker.getMonth());
birthCalendar.set(Calendar.DAY_OF_MONTH, datePicker.getDayOfMonth());
// 需要精确到时间再放开下面两行,传入TimePicker的值
// birthCalendar.set(Calendar.HOUR_OF_DAY, timePicker.getHour());
// birthCalendar.set(Calendar.MINUTE, timePicker.getMinute());

Calendar currentCalendar = Calendar.getInstance();
int age = currentCalendar.get(Calendar.YEAR) - birthCalendar.get(Calendar.YEAR);

// 判断今年的生日是否还没到,没到的话年龄要减1
if (currentCalendar.get(Calendar.DAY_OF_YEAR) < birthCalendar.get(Calendar.DAY_OF_YEAR)) {
    age--;
}
// 兜底处理异常日期场景,避免出现负数年龄
age = Math.max(age, 0);

踩坑提醒:不要自己拿时间戳差值除以一年的毫秒数算年龄,闰年、大小月、夏令时切换都会导致计算结果出错,用系统封装好的API是最省事的选择。

内容的提问来源于stack exchange,提问作者D12 Bhoomi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 23:40:36