Java 根据年月日精确计算年龄
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date; /**
* Created by qing on 2017/3/28.
*/
public class AgeUtils {
// 根据年月日计算年龄,birthTimeString:"1994-11-14"
public static int getAgeFromBirthTime(String birthTimeString) {
// 先截取到字符串中的年、月、日
String strs[] = birthTimeString.trim().split("-");
int selectYear = Integer.parseInt(strs[0]);
int selectMonth = Integer.parseInt(strs[1]);
int selectDay = Integer.parseInt(strs[2]);
// 得到当前时间的年、月、日
Calendar cal = Calendar.getInstance();
int yearNow = cal.get(Calendar.YEAR);
int monthNow = cal.get(Calendar.MONTH) + 1;
int dayNow = cal.get(Calendar.DATE); // 用当前年月日减去生日年月日
int yearMinus = yearNow - selectYear;
int monthMinus = monthNow - selectMonth;
int dayMinus = dayNow - selectDay; int age = yearMinus;// 先大致赋值
if (yearMinus < 0) {// 选了未来的年份
age = 0;
} else if (yearMinus == 0) {// 同年的,要么为1,要么为0
if (monthMinus < 0) {// 选了未来的月份
age = 0;
} else if (monthMinus == 0) {// 同月份的
if (dayMinus < 0) {// 选了未来的日期
age = 0;
} else if (dayMinus >= 0) {
age = 1;
}
} else if (monthMinus > 0) {
age = 1;
}
} else if (yearMinus > 0) {
if (monthMinus < 0) {// 当前月>生日月
} else if (monthMinus == 0) {// 同月份的,再根据日期计算年龄
if (dayMinus < 0) {
} else if (dayMinus >= 0) {
age = age + 1;
}
} else if (monthMinus > 0) {
age = age + 1;
}
}
return age;
} // 根据时间戳计算年龄
public static int getAgeFromBirthTime(long birthTimeLong) {
Date date = new Date(birthTimeLong * 1000l);
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String birthTimeString = format.format(date);
return getAgeFromBirthTime(birthTimeString);
}
}
精确到月:
/**
* Created by admin on 2017/12/15.
*/
public String getAgeFromBirthTime(Date birthDay) {
Calendar cal = Calendar.getInstance();
// 得到当前时间的年、月、日
int yearNow = cal.get(Calendar.YEAR);
int monthNow = cal.get(Calendar.MONTH)+1;
int dayNow = cal.get(Calendar.DATE);
// 先截取到传入中的年、月、日
cal.setTime(birthDay);
int selectYear = cal.get(Calendar.YEAR);
int selectMonth = cal.get(Calendar.MONTH) + 1;
int selectDay = cal.get(Calendar.DAY_OF_MONTH);
// 用当前年月日减去生日年月日
int yearMinus = yearNow - selectYear;
int monthMinus = monthNow - selectMonth;
int dayMinus = dayNow - selectDay;
String ageToMonth= "1月";
if (yearMinus > 0){
ageToMonth = String.valueOf(yearMinus)+"岁";
} else if (monthMinus > 0) {
ageToMonth = String.valueOf(monthMinus)+"月";
}
return ageToMonth;
}
public static void main(String[] args) {
String dataOfBirth = "2017-10-28";
String age = getAgeFromBirthTime(dataOfBirth);
System.out.println("age:" + age);
}
鸡肋:
public class TestAge {
public static void main(String[] args) {
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
//此处是获得的年龄
int age = getAge(parse("2015-12-5 00:00:00")); //由出生日期获得年龄***
System.out.println(age);
} catch (Exception e) {
e.printStackTrace();
}
}
//出生日期字符串转化成Date对象
public static Date parse(String strDate) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.parse(strDate);
}
//由出生日期获得年龄
public static int getAge(Date birthDay) throws Exception {
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);
int age = yearNow - yearBirth;
if (monthNow <= monthBirth) {
if (monthNow == monthBirth) {
if (dayOfMonthNow < dayOfMonthBirth) age--;
}else{
age--;
}
}
return age;
}
Java 根据年月日精确计算年龄的更多相关文章
- SQL 根据日期精确计算年龄
SQL 根据日期精确计算年龄 第一种: 一张人员信息表里有一人生日(Birthday)列,跟据这个列,算出该人员的年龄 datediff(year,birthday,getdate()) 例:birt ...
- 在Excel中根据某一个单元格的出生日期自动精确计算年龄
=IF(MONTH(NOW())<MONTH(G4),INT(YEAR(NOW())-YEAR(G4))-1,IF(MONTH(NOW())>MONTH(G4),YEAR(NOW())-Y ...
- [转] 商业应用中Java浮点数的精确计算及表示
[From] https://blog.csdn.net/stevene/article/details/586089 问题提出 (1).浮点数精确计算 胜利油田三流合一项目中一直存在一个问题,就是每 ...
- Java使用BigDecimal精确计算的简单公式计算器
由于工作需要,写了一个使用BigDecimal运算的精确计算的计算器(然后发现其实比不用BigDecimal的并好不到哪里去) 只能做加减乘除 double类型的数字在千万级别的时候会转成科学计数法, ...
- Java BigDecimal进行精确计算
前言 float和double类型的主要设计目标是为了科学计算和工程计算.他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的.然而,它们没有提供完全精确的结果,所以 ...
- java的数字精确计算问题-BigDecimal
java的数字运算,偶尔会出现精度的问题,以下阐述的 java的BigDecimal类的使用. 例如: System.out.println(0.9+0.3); 结果1.2 System.out.pr ...
- SQL根据出生日期精确计算年龄、获取日期中的年份、月份
第一种: 一张人员信息表里有一人生日(Birthday)列,跟据这个列,算出该人员的年龄 datediff(year,birthday,getdate()) 例:birthday = '2003-3- ...
- C# 根据出生日期(年月日)计算年龄的代码
public int GetAgeByBirthdate(DateTime birthdate) { DateTime now = DateTime.Now; int age = now.Year - ...
- Excel中最精确的计算年龄的公式
身份证算年龄 假设A1是身份证号所在单元格 =IF(MONTH(NOW())<INT(MID(A1,11,2)),INT(YEAR(NOW())-INT(MID(A1,7,4)))-1,IF(M ...
随机推荐
- Android记事本开发02
今天: 继续学习基础知识. 昨天: 学习了ADB工具的基本命令. Android项目的目录结构. AndroidManifest.xml Android应用程序的打包和安装 遇到的问题: 无.
- WeUI 在小程序中使用
才接触小程序.想找个ui框架..也不知道咋弄: 下载地址:点击打开链接 将weui-wxss-master\dist\style\weui.wxss文件导入到小程序项目的根目录下 引入weui.wxs ...
- hdu 3499 Flight (最短路径)
Flight Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Su ...
- HDU - 2814 Visible Trees
题意: m*n(1<=m,n<=100000)的森林里,起始点在(1,1),某人从(0,0)点开始看,问能看到多少棵树. 题解: 求出1~x中的每个数与1~y的数中互质的数的总和.用素数筛 ...
- [poj] 3347 Kadj Square || 计算几何的“线段覆盖”
原题 多组数据,给出n个正方形的边长,使他们以45度角倾斜的情况下最靠左(在第一象限内),如图.求从上看能看到哪几个完整的正方形. 借鉴于https://www.cnblogs.com/Ritchie ...
- C++ primer 学习笔记之容器insert
今天在做练习9.22时,始终出现segments fault.最后才发现原来是自己对“容器insert之后迭代器会失效”的理解不够透彻. 题目如下: 假定iv是一个int的vector,下面的程序存在 ...
- 原生方法scrollTo支持滚动特效
scrollTo默认的是瞬间滚动到坐标位置, 使用配置方法, behavior属性设置为smooth就可以支持平滑滚动了,不过这种方法兼容性不行,并且无法支持配置滚动速率 // 默认滚动效果,瞬时滚动 ...
- 【转】beyond compare 启动提示“应用程序发生错误”
[转]beyond compare 启动提示“应用程序发生错误” 今天到公司BCompare不能打开,重新安装也不能打开.最后处理下,就解决了.方法是把C:\Documents and Setti ...
- Hibernate中多种方式解除延迟加载
问题引发:因为dao使用load(),默认延迟加载的,当在biz关闭session之后,UI层无法获取对象的非id属性值 解决方案: 1.变成get,即时加载 2.用Hibernate.isIniti ...
- [ZJOI2008]树的统计——树链剖分
本题是一个树链剖分裸题,由于比较菜,老是RE,后来发现是因为使用了全局变量. /************************************************************ ...