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);
更多推荐
java跨年
发布评论