public static String getAgeTxt(String birthTime,String beginTime,int level){
if(StringUtils.isBlank(birthTime)||StringUtils.isBlank(beginTime)){
System.out.println("参数中有空值!");
} int year = 0,month=0,day=0,hour=0; Date birthDate = getDateByString(birthTime,"yyyy-MM-dd HH:mm:ss");
Date beginDate = getDateByString(beginTime,"yyyy-MM-dd HH:mm:ss");
Calendar cBirthDate = Calendar.getInstance();
Calendar cBeginDate = Calendar.getInstance();
cBirthDate.setTime(birthDate);
cBeginDate.setTime(beginDate); if(cBeginDate.get(Calendar.YEAR) < cBirthDate.get(Calendar.YEAR)){
return "出生日期大于当前时间";
} //计算出生小时
if(cBeginDate.get(Calendar.HOUR_OF_DAY) < cBirthDate.get(Calendar.HOUR_OF_DAY)){
hour = cBeginDate.get(Calendar.HOUR_OF_DAY)+24 - cBirthDate.get(Calendar.HOUR_OF_DAY);
day = day-1;
}else{
hour = cBeginDate.get(Calendar.HOUR_OF_DAY) - cBirthDate.get(Calendar.HOUR_OF_DAY);
} //计算出生日
if(cBeginDate.get(Calendar.DAY_OF_MONTH)<cBirthDate.get(Calendar.DAY_OF_MONTH)){
day = day + cBeginDate.get(Calendar.DAY_OF_MONTH)+ cBirthDate.getActualMaximum(Calendar.DAY_OF_MONTH)-cBirthDate.get(Calendar.DAY_OF_MONTH);
month = month-1;
}else {
day = day + cBeginDate.get(Calendar.DAY_OF_MONTH)-cBirthDate.get(Calendar.DAY_OF_MONTH);
} //计算出生月
if(cBeginDate.get(Calendar.MONTH) < cBirthDate.get(Calendar.MONTH)){
month = month + cBeginDate.get(Calendar.MONTH)+12 - cBirthDate.get(Calendar.MONTH);
year = year -1;
}else{
month = month + cBeginDate.get(Calendar.MONTH) - cBirthDate.get(Calendar.MONTH);
} //计算出生年
year = year + cBeginDate.get(Calendar.YEAR) - cBirthDate.get(Calendar.YEAR); if(year >7){
return year+"岁";
}else if (year >0 && year <7){
if(month>0 && month <10){
return year+"岁零"+month+"月";
}else if(month >=10 ){
return year+"岁"+month+"月";
}else {
if(day>0){
return year+"岁零"+day+"天";
}else{
return year+"岁";
}
}
}else {
if(month >0){
if( day >0 && day <10){
return month+"个月零"+day+"天";
}else if(day >=10){
return month+"个月"+day+"天";
}else{
return month+"个月";
}
}else{
if(day >0){
if( hour >0 && hour <10){
return day+"天零"+hour+"小时";
}else if(hour >=10){
return day+"天"+hour+"小时";
}else{
return day+"天";
}
}else{
if(hour>0){
return hour+"小时";
}else{
return "出生不足一小时";
}
}
}
}
}

其中比较重要的几点

1、Calendar.getActualMaximum()计算对应的范围内最大值

2、计算年龄应该是从小到大计算年龄,这样方便计算后面的年龄(利用减法的原理);

Java 计算年龄的更多相关文章

  1. java计算年龄

    精确到天计算年龄 public static int getAgeByCardId(String card) throws Exception { Integer len = card.length( ...

  2. Java 根据年月日精确计算年龄

    import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * Created b ...

  3. Java 根据出生日期计算年龄

    1.把出生日期字符串转换为日期格式. public static Date parse(String strDate) throws ParseException { SimpleDateFormat ...

  4. java身份证计算年龄

    技术交流群: 233513714 /** * 根据身份证计算年龄 * * @param idcard * @return */ public static Integer idCardToAge(St ...

  5. java 根据生日计算年龄 Java问题通用解决代码

    根据生日计算年龄可以通过Calendar实现.最简单可以考虑get(Calendar.DAY_OF_YEAR)来简单修正年龄,但是遇到生日在闰年的2月29之后,或者今年是闰年的2月29之后可能出现计算 ...

  6. SQL语句通过身份证号计算年龄

    SQL语句通过身份证号计算年龄 1.截取身份证号上的出生日期 身份证一般为18位数和15位数 18位数身份证的第7-10位数是出生年份,第11-14位数是出生月日,所以18位身份证的年龄计算如下 su ...

  7. 用Java计算某个日期100天后的日期

    用Java计算日期时间,首先考虑到时间类,Java中提供的和时间日期相关的类里,有一个Calendar类,可以获取某个时间日期. 计算某个日期100天后的日期,思路如下: 1.先设定时间,例如2017 ...

  8. java计算两个日期相差多少天

    java计算两个日期相差多少天 public class DateUtil{ public static int betweenDays(Date startDate, Date endDate ) ...

  9. iOS 获取当前时间以及计算年龄(时间差)

    获取当前时间 NSDate *now = [NSDate date]; NSLog(@"now date is: %@", now); NSCalendar *calendar = ...

随机推荐

  1. 使用EL表达式调用java方法

    首先,新建一个类,类中写一个静态方法 public class PrivilegeUtils { public static Boolean checkPrivilegeByName(User use ...

  2. Taurus.MVC 2.2.3.4 :WebAPI 实现权限控制认证(及功能增强说明)

    前言: 前两天,当我还在老家收拾行旅,准备回广州,为IT连的创业再战365天时, 有网友扣上问:Taurus.MVC中如何实现认证和权限控制,最好能做个小例子. 我一不小心回了句:等回广州我再写篇文章 ...

  3. Java经典编程题50道之十七

    猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个:第二天早上又将剩下的桃子吃掉一半,而且又多吃了一个.以后每天早上都吃了前一天剩下的一半零一个.到第10天早上想再吃时,就只 ...

  4. Linux系统上安装JDK1.8

    1,下载jdk1.8 首先进入jdk下载目录:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-213315 ...

  5. java 中对对象的调用

    java程序设计语言对对象采用的不是引用的调用,实际上对象引用进行的是值得传递.(from:核心卷1  page:123)

  6. shell脚本比较字符串相等

    昨天在定位一个bug的时候,需要些shell脚本,用到了字符串的比较,出了一个小问题,就搜索总结了一下. 第一种方法:-eq 对比字符串是否相等,我首先想到的就是 -eq,然而打印的结果不正确.各种e ...

  7. PHP秒杀系统全方位设计(一)

    秒杀系统特点人多商品少时间短流量高外挂机器[黄牛和非黄牛] 技术分析瞬间高并发的处理能力多层次的分布式处理能力人机交互与对抗[12306验证码图片] 技术选型分析Linux+Nginx+PHP+Mys ...

  8. alter 和 update的区别?

    alter用来增加或者减少列,alter stuednt add name vachar2(30): update用来更改表中的数据:update student set sutudent.name ...

  9. 高性能JavaScript读书笔记

    零.组织结构 根据引言,作者将全书划分为四个部分: 一.页面加载js的最佳方式(开发前准备) 二.改善js代码的编程技巧(开发中) 三.构建与部署(发布) 四.发布后性能检测与问题追踪(线上问题优化) ...

  10. CodeForces-731A

    每次找到最短距离,然后更新指针的位置. AC代码: #include<cstdio> #include<cmath> const int maxn=100+5; char s[ ...