根据生日计算年龄,4岁以前精确到月

本文介绍了一个实用的Java方法,用于根据输入的生日计算出精确的年龄,包括岁数和月份数。此方法考虑了当前日期与生日之间的详细差异,能够准确反映年龄的细微差别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
* 根据生日计算年龄
* @param birthDay
* @return
*/
public static String getAgeByBirth(Date birthDay) {
StringBuffer sb = new StringBuffer();
try {
int age = 0;
int month = 0;
Calendar cal = Calendar.getInstance();
if (cal.before(birthDay)) { //出生日期晚于当前时间,无法计算
throw new IllegalArgumentException(
"The birthDay is before Now.It's unbelievable!");
}
int yearNow = cal.get(Calendar.YEAR); //当前年份
int monthNow = cal.get(Calendar.MONTH); //当前月份
int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH); //当前日期
cal.setTime(birthDay);
int yearBirth = cal.get(Calendar.YEAR);
int monthBirth = cal.get(Calendar.MONTH);
int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH);
age = yearNow - yearBirth; //计算整岁数
if (monthNow <= monthBirth) {
if (monthNow == monthBirth) {
//if (dayOfMonthNow < dayOfMonthBirth) age--;//当前日期在生日之前,年龄减一
} else {
month = monthNow - monthBirth + 12;
age--;//当前月份在生日之前,年龄减一
}
} else {
month = monthNow - monthBirth;
}

if (age < 4) {
if (age == 0) {
sb.append(month + "个月");
} else if (month == 0) {
sb.append(age + "岁");
} else {
sb.append(age + "岁" + month + "个月");
}
} else {
sb.append(age + "岁");
}
} catch (Exception e) {
return "";
}
return sb.toString();
}

转载于:https://www.cnblogs.com/deyujincheng/p/11016433.html

### 回答1: 您可以使用Oracle内置的函数`floor(months_between(sysdate, birthday)/12)`来计算一个人的年龄,但是这样计算出来的年龄不会精确到天。如果您希望精确到天,可以使用以下代码: ``` floor( (sysdate - birthday) / 365 ) ``` 这个代码将会给出一个人的年龄,以天为单位。 举个例子,如果某人的生日是`1992-10-22`,当前日期是`2023-02-11`,使用上面的代码,他的年龄就是: ``` floor( (to_date('2023-02-11','YYYY-MM-DD') - to_date('1992-10-22','YYYY-MM-DD')) / 365 ) ``` 计算结果是30年。 ### 回答2: 在Oracle中,可以使用以下方法根据生日计算年龄精确到天。 首先,我们需要获得当前日期,可以使用SYSDATE函数来获取系统当前日期和时间。 接下来,我们需要获得用户的生日信息。假设我们有一个名为"birth_date"的日期类型的字段存储了用户的生日。 要计算年龄,我们可以使用MONTHS_BETWEEN函数。该函数返回两个日期之间的数差。 我们可以通过以下SQL语句计算年龄: SELECT FLOOR(MONTHS_BETWEEN(SYSDATE, birth_date) / 12) AS age FROM table_name; 其中,table_name是存储生日信息的表名。 此外,如果我们希望精确到天,我们可以进一步计算天数差并将其添加到年龄中。 我们可以使用以下SQL语句计算精确到天的年龄: SELECT FLOOR(MONTHS_BETWEEN(SYSDATE, birth_date) / 12) AS age, FLOOR(MOD(MONTHS_BETWEEN(SYSDATE, birth_date), 12)) AS months, FLOOR(SYSDATE - ADD_MONTHS(birth_date, FLOOR(MONTHS_BETWEEN(SYSDATE, birth_date)))) AS days FROM table_name; 这个查询将返回精确到天的年龄。 需要注意的是,以上方法是基于当天的日期计算的,如果生日还未到,则根据计算所得的年龄可能会少一天。 希望以上解答对你有帮助! ### 回答3: Oracle可以使用Oracle SQL中的日期函数来根据生日计算年龄精确到天。以下是一种可以实现的方法: 首先,我们可以使用sysdate函数获取当前日期,然后使用to_date函数将生日字符串转换成日期格式。 使用to_date函数时,我们需要指定生日字符串的格式。例如,如果生日的格式是'YYYY-MM-DD',我们可以使用以下的语法将生日字符串转换成日期: to_date('1990-01-01', 'YYYY-MM-DD') 接下来,我们可以使用months_between函数来计算生日到当前日期之间的份差值。 months_between函数的语法是: months_between(end_date, start_date) 其中end_date是结束日期,start_date是开始日期。生日是开始日期,而当前日期是结束日期。 然后,我们可以使用floor函数将份差值取整,以得到整数的年龄。 最后,我们可以使用trunc函数将当前日期的时间部分截断,以得到年龄精确天数。 综上所述,以下是一种用于Oracle SQL的计算年龄的查询: SELECT trunc(months_between(sysdate, to_date('1990-01-01', 'YYYY-MM-DD')) / 12) AS 年龄, trunc(mod(months_between(sysdate, to_date('1990-01-01', 'YYYY-MM-DD')), 12)) AS 份, trunc(sysdate - trunc((months_between(sysdate, to_date('1990-01-01', 'YYYY-MM-DD')) / 12) * 365)) AS 天数 FROM dual; 这个查询将返回生日为'1990-01-01'的人的年龄精确到天。年龄份和天数分别以"年龄"、"份"和"天数"作为列名,显示在查询结果中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值