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 根据年月日精确计算年龄的更多相关文章

  1. SQL 根据日期精确计算年龄

    SQL 根据日期精确计算年龄 第一种: 一张人员信息表里有一人生日(Birthday)列,跟据这个列,算出该人员的年龄 datediff(year,birthday,getdate()) 例:birt ...

  2. 在Excel中根据某一个单元格的出生日期自动精确计算年龄

    =IF(MONTH(NOW())<MONTH(G4),INT(YEAR(NOW())-YEAR(G4))-1,IF(MONTH(NOW())>MONTH(G4),YEAR(NOW())-Y ...

  3. [转] 商业应用中Java浮点数的精确计算及表示

    [From] https://blog.csdn.net/stevene/article/details/586089 问题提出 (1).浮点数精确计算 胜利油田三流合一项目中一直存在一个问题,就是每 ...

  4. Java使用BigDecimal精确计算的简单公式计算器

    由于工作需要,写了一个使用BigDecimal运算的精确计算的计算器(然后发现其实比不用BigDecimal的并好不到哪里去) 只能做加减乘除 double类型的数字在千万级别的时候会转成科学计数法, ...

  5. Java BigDecimal进行精确计算

    前言 float和double类型的主要设计目标是为了科学计算和工程计算.他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的.然而,它们没有提供完全精确的结果,所以 ...

  6. java的数字精确计算问题-BigDecimal

    java的数字运算,偶尔会出现精度的问题,以下阐述的 java的BigDecimal类的使用. 例如: System.out.println(0.9+0.3); 结果1.2 System.out.pr ...

  7. SQL根据出生日期精确计算年龄、获取日期中的年份、月份

    第一种: 一张人员信息表里有一人生日(Birthday)列,跟据这个列,算出该人员的年龄 datediff(year,birthday,getdate()) 例:birthday = '2003-3- ...

  8. C# 根据出生日期(年月日)计算年龄的代码

    public int GetAgeByBirthdate(DateTime birthdate) { DateTime now = DateTime.Now; int age = now.Year - ...

  9. Excel中最精确的计算年龄的公式

    身份证算年龄 假设A1是身份证号所在单元格 =IF(MONTH(NOW())<INT(MID(A1,11,2)),INT(YEAR(NOW())-INT(MID(A1,7,4)))-1,IF(M ...

随机推荐

  1. 膜拜膜拜c++

    被一个virtual搞得脑袋疼了好几天,明天继续虚函数+虚继承混合,伤不起,伤不起

  2. sqlalchemy presto 时间比较

    大数据统计时,需要计算开仓订单减掉经纪商时间差,等于n 小时 或 星期几的订单. presto sql语句如下: select sum(profit) from t_table where open_ ...

  3. 第十四篇:JavaScript

    本篇内容 简介 使用 DOM 一. 简介 JavaScript 是世界上最流行的编程语言. 这门语言可用于 HTML 和 web,更可广泛用于服务器.PC.笔记本电脑.平板电脑和智能手机等设备. Ja ...

  4. Icarus Verilog和GTKwave使用简析

    Icarus Verilog和GTKwave使用简析 来源 http://blog.csdn.net/husipeng86/article/details/60469543 本文测试文件在window ...

  5. 2017 多校2 hdu 6053 TrickGCD

    2017 多校2 hdu 6053 TrickGCD 题目: You are given an array \(A\) , and Zhu wants to know there are how ma ...

  6. ubuntu启动报错 Errors were found while checking the disk-drive for /

    开机报这个错误,主要原因是硬盘检测不通过导致的,下面介绍两种方法规避该问题: 修改grub 这个方法网上比较多,直接贴过来: 进入Ubuntu启动菜单时,光标选中 *Ubuntu 后,按键盘上的 e ...

  7. 论文笔记《Hand Gesture Recognition with 3D Convolutional Neural Networks》

    一.概述 Nvidia提出的一种基于3DCNN的动态手势识别的方法,主要亮点是提出了一个novel的data augmentation的方法,以及LRN和HRn两个CNN网络结合的方式. 3D的CNN ...

  8. WCF技术解剖2-TcpTracer路由解析代码

    TcpTrace路由解析,参考页面-http://www.cnblogs.com/artech/archive/2008/09/19/1294227.html. TcpTrace工具下载地址:http ...

  9. 自以为是而已,不知道它是什么 window.onload 放执行

    var $=jQuery=function(onload){window.onload=onload();} jQuery(function(){alert(2);}); $(function(){a ...

  10. Python 求最大公因式~辗转相除法

    从错误中学python(4)——最小公约数与辗转相除法 网上看到一篇很简洁辗转相除法的写法:不用判断a,b的大小 def gcp(a, b): while(b%a!=0): a,b=b%a,a ret ...