Java 计算时间差之年龄问题
2015-05-19 15:23
302 查看
我们在做系统开发的时候,往往会用到人的年龄,但是年龄是动态变化的,所以一般都不进行存储,而是选择存储人的生日,通过生日动态算出人的年龄。而有时候年龄需要用到周岁(月、天),这种比较具体的时间,如果小于1岁,需要具体到月,小于1月,具体到天,不足一天的按一天算,只是将当前年份减去出生日期的年份往往不准确。
比如,一个人是1999年12月31日出生的,而当前时间是2000年1月1日,如果按照刚才说的那种方法计算的话,得到的年龄是1岁,而实际年龄只有1天。
错误思路:使用如下代码计算天数及天数以下的事件(天、小时、分钟...)可以精确计算,但是使用365的倍数计算年就会出现错误数据,如同月数不一定是30天
正确思路:通过Calendar类和Thu Jan 01 08:00:00 CST 1970 这个日历类的起始时间
注意事项:
使用Calendar时一定要注意月份问题,Calendar.MONTH从0开始计算的,及一月份对应的值是0。所以,从身份证号或者生日之类的数据中取出月份值要减去1再赋值到Calendar中。
比如,一个人是1999年12月31日出生的,而当前时间是2000年1月1日,如果按照刚才说的那种方法计算的话,得到的年龄是1岁,而实际年龄只有1天。
错误思路:使用如下代码计算天数及天数以下的事件(天、小时、分钟...)可以精确计算,但是使用365的倍数计算年就会出现错误数据,如同月数不一定是30天
DateFormat df = new SimpleDateFormat("yyyy:MM:dd"); Date d1 = df.parse("2013:12:31"); Date d2 = df.parse("2015:4:12"); long diff = d1.getTime() - d2.getTime(); long years = diff / (1000 * 60 * 60 * 24 * 365); long days = diff / (1000 * 60 * 60 * 24); long hours = (diff - days * (1000 * 60 * 60 * 24)) / (1000 * 60 * 60); long minutes = (diff - days * (1000 * 60 * 60 * 24) - hours * (1000 * 60 * 60)) / (1000 * 60); System.out.println(years + "年" + "" + days + "天" + hours + "小时" + minutes + "分"); try { System.out.println(getAgeStr(d1)); } catch (Exception e) { e.printStackTrace(); }
正确思路:通过Calendar类和Thu Jan 01 08:00:00 CST 1970 这个日历类的起始时间
Calendar c1 = Calendar.getInstance(); long nowmillSeconds = c1.getTimeInMillis(); Calendar c2 = Calendar.getInstance(); c2.setTime(birthday); long birmillSeconds = c2.getTimeInMillis(); Calendar c3 = Calendar.getInstance(); long millis = nowmillSeconds - birmillSeconds; c3.setTimeInMillis(millis); int year = c3.get(Calendar.YEAR); int month = c3.get(Calendar.MONTH); int day = c3.get(Calendar.DAY_OF_MONTH); int hour = c3.get(Calendar.HOUR_OF_DAY); if (year > 1970) { return year - 1970 + "岁"; } else if (month > Calendar.JANUARY) { return month - Calendar.JANUARY + "月"; } else if (day > 1) { return day - 1 + "天"; }else{ return "1天"; }
注意事项:
使用Calendar时一定要注意月份问题,Calendar.MONTH从0开始计算的,及一月份对应的值是0。所以,从身份证号或者生日之类的数据中取出月份值要减去1再赋值到Calendar中。
相关文章推荐
- Java 传入时间如“2007-09-01”格式计算出年龄
- java用Calendar计算年龄的问题
- java 根据生日计算年龄 Java问题通用解决代码
- java计算时间差 Java问题通用解决代码
- Java中计算时间差的小问题
- java中常用的与时间有关的方法(string与date转化,出生日期转年龄,时间计算周次等)
- 【Java学习之代码学习】 Prog19_计算年龄问题
- java根据出生日期和当前时间计算年龄
- Java浮点数计算精确度问题
- java计算代码执行时间
- java浮点计算精度丢失问题
- java如何计算程序运行时间
- Java——三人年龄问题
- Java中日期的用法和通话时间计算
- java 用于计算时间的工具类
- Java时间格式化问题
- Java 根据年月日精确计算年龄
- 关于java时间设置时遇到的一个问题。
- 【Java】Java根据时间计算是否为上午、中午、下午以及根据日期获得星期几
- java计算两个日期中间的时间