java跨年_Java通过日历实现兼容跨年的年龄计算

今天在需要实现一个计算年龄的功能,在网上查了好久,现成的方法都不支持跨年的情况。所以就改造了一下。

[code] /**

*

* @param birthDay 出生日期

* @param time 统计时间

* @return

* @throws Exception

*/

public int getAge(Date birthDay,Calendar time) throws Exception {

Calendar cal = Calendar.getInstance();

if (cal.before(birthDay)) {

throw new IllegalArgumentException(

"The birthDay is before Now.It's unbelievable!");

}

int yearNow = time.get(Calendar.YEAR);

int monthNow = time.get(Calendar.MONTH);

int dayOfMonthNow = time.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);

int age = yearNow - yearBirth;

if (monthNow <= monthBirth) {

if (monthNow == monthBirth) {

if (dayOfMonthNow < dayOfMonthBirth) age--;

}else{

age--;

}

}

return age;

}

[code]

//我需要统计到当前月份的最后一天,所以取到下一个月的第一天在减1,这样就可以规避掉大月小月和平年闰年的问题了

int month=3;//这是传过来的统计时间的月份

int minus=2018;//这是传过来的统计时间的年份

SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd");

String monthStr=(month+1)+"";

if(monthStr.length()==1){

monthStr="0"+monthStr;

}

int year=0;

if(monthStr.equals("13")){

monthStr="01";

year=minus+1;

}else{

year=minus;

}

Calendar now = Calendar.getInstance();

try {

now.setTime(sdf1.parse(year+monthStr+"01"));

now.set(Calendar.DATE, now.get(Calendar.DATE) - 1);

} catch (ParseException e1) {

// TODO Auto-generated catch block

e1.printStackTrace();

}

[code] Date parse = sdf1.parse("19590101");

int age = getAge(parse,now);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值