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. linux集群架构

    Linux集群架构   根据功能划分为两大类:高可用和负载均衡 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 实现高可用的开源软件有:heart ...

  2. openwrt pptpd客户端

    步骤 opkg update opkg install ppp-mod-pptp opkg install luci-proto-ppp 在OpenWRT安裝PPTP Client端 首先用ssh登陆 ...

  3. 洛谷P1879 [USACO06NOV]玉米田Corn Fields【状压DP】题解+AC代码

    题目描述 Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ...

  4. 关于echarts 报错 初始化对象未定义

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  5. Pycharm常用的使用方法

    PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Project管理.代码跳转.智能提示.自动完成.单元测试.版本控制. ...

  6. python进阶学习笔记(二)

    1.模块和包的概念 python的解决方案是把同名的模块放到不同的包中 1.1,导入模块 要使用一个模块,我们必须首先导入该模块.Python使用import语句导入一个模块.例如,导入系统自带的模块 ...

  7. eclipse设置git忽略文件

    使用eclipse开发的程序员们经常会接触版本控制软件,这里只要说下eclipse使用egit的情况下设置忽略文件. 特此说明在这里使用window->team->ignored对于git ...

  8. 麻省理工18年春软件构造课程阅读02“Java基础”

    本文内容来自MIT_6.031_sp18: Software Construction课程的Readings部分,采用CC BY-SA 4.0协议. 由于我们学校(哈工大)大二软件构造课程的大部分素材 ...

  9. 2018-03-03-解决win下凭据删除不干净而无法登录共项目录的问题

    layout: post title: 2018-03-03-解决win下凭据删除不干净而无法登录共项目录的问题 key: 20180303 tags: GIT 版本管理 modify_date: 2 ...

  10. python数据可视化学习1

    import matplotlib.pyplot as plt input_values = [1,2,3,4,5] #输入值 squares = [1,4,9,16,25] #输出值 plt.plo ...