思路
- 获取Date类型的生日,之后转换成毫秒,再把当前的毫秒数相减就可以获得到用户活了多少毫秒,再把毫秒转换成天转换成年即可,可能需要处理一下闰年的情况
- 获取Date类型的生日,转换成Calendar,把当前时间也转成Calendar之后获取两者Calendar.YEAR,两者相减,之后判断生日的Calendar.DAY_OF_YEAR是否大于当前时间,如果大于说明还没有到今年的生日,刚刚算出来的年龄要减一
实现
1.转换毫秒(没有处理闰年的)
String dateStr = "1999-1-1";
Date date = Date.valueOf(dateStr);
Date now = new Date(System.currentTimeMillis());
//相差天数
int day = (int)((now.getTime()-date.getTime()) / (1000 * 60 * 60 * 24));
System.out.println("年龄=" + (day / 365));
2.使用Calendar
String dateStr = "1999-1-1"; //生日
Date date = Date.valueOf(dateStr);
Calendar now = Calendar.getInstance();
Calendar birth = Calendar.getInstance();
birth.setTime(date);
int age = 0;
if(birth.after(now)) {
//当生日在当前时间的前面的时候->这是不可能的
} else {
age = now.get(Calendar.YEAR) - birth.get(Calendar.YEAR);
if(now.get(Calendar.DAY_OF_YEAR) < birth.get(Calendar.DAY_OF_YEAR)) {
age -= 1;
}
}
System.out.println("年龄=" + age);
个人比较推荐第二种方法,比较直接而且日期计算一般都不直接用Date相关的方法的。