我们在做系统开发的时候,往往会用到人的年龄,但是年龄是动态变化的,所以一般都不进行存储,而是选择存储人的生日,通过生日动态算出人的年龄。而有时候年龄需要用到周岁(月、天),这种比较具体的时间,如果小于1岁,需要具体到月,小于1月,具体到天,不足一天的按一天算,只是将当前年份减去出生日期的年份往往不准确。

比如,一个人是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 计算时间差之年龄问题相关推荐

  1. Java 计算时间差

    Java 计算时间差 1. Date 计算时间差 2. 两 LocalDate 相差年份,返回Integer类型 3. LocalDateTime 计算时间差 1. Date 计算时间差 import ...

  2. Java计算时间差、日期差总结(亲测)

    Java计算时间差.日期差总结 最近工作中遇到需要计算时间差,搜索了几种计算时间差的方法,这里总结一下 1.java 7中的日历类Calendar Calendar类使用其静态的getInstance ...

  3. Java计算时间差_传统的SimpleDateFormat类

    Java计算时间差_传统的SimpleDateFormat类 SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd ...

  4. Java计算时间差、日期差总结

    Java计算时间差.日期差总结 最近工作中遇到需要计算时间差,搜索了几种计算时间差的方法,这里总结一下 1.java 7中的日历类Calendar Calendar类使用其静态的getInstance ...

  5. java计算时间差_java中计算两个时间差

    java计算时间差及比较时间大小 比如:现在是2004-03-26 13:31:40 过去是:2004-01-02 11:30:24 我现在要获得两个日期差,差的形式为:XX天XX小时XX分XX秒 方 ...

  6. java计算时间差 Java问题通用解决代码

    java实现计算时间差 正式版:       /**        * 计算时间差,求出两者相隔的时间        *        * @param nowDate        *        ...

  7. Java计算时间差、日期差

    在java中,计算时间差或日期差有多种方法,以下提供五种示例: 目录 一.使用 Instant 和 Duration 类计算时间差 二.使用 LocalDate 和 ChronoUnit 类计算日期差 ...

  8. java 计算 时间差_Java8 时间差计算

    方式一: /** * DateTimeFormatter java 8 线程安全 * @throws Exception */ @Test public void testTimeDiff() thr ...

  9. java计算时间差_Java中计算两个日期的时间差

    这篇文章将使用两个例子计算两个日期的时间差. 1.使用Java SDK. 2.使用Joda库. 1.使用Java SDK 计算两个Date之间的时间差,基本思路为把Date转换为ms(微秒),然后计算 ...

最新文章

  1. Android游戏开发基础part2--Canvas画布
  2. [SignalR]初步认识以及安装
  3. 《强化学习周刊》第11期:强化学习应用之模拟到真实
  4. 死信交换机与死信队列
  5. ATF(TF-A)的编译方法
  6. C# winform中判断控件类型
  7. 罗技 连点 脚本_罗技推出多款《英雄联盟》联名外设 看了就忍不住想要
  8. html %3ca id=%3e,xss编码小结
  9. linux下刻录光盘读取不了_Linux下刻录光盘实战
  10. Bailian2679 整数的立方和【入门】
  11. iOS import,include和class的区别
  12. 加载字典文件,扫描网站潜在目录
  13. 安卓软件改名器_安卓歌词适配V3.9.5 无损音乐下载器(软件篇)
  14. python可以写外汇里的ea吗_小菜鸟教你们写外汇ea -
  15. Aerial for Mac(mac最美的鸟瞰屏幕保护程序)支持big
  16. 华为HCIA鲲鹏生态体系介绍
  17. 1 分钟 Serverless 搭建你的首个个人网站(完成就送猫超卡)
  18. xampp linux 命令,centos 下XAMPP 常用命令
  19. 《C语言入门指南》合集版,学习c语言有这一篇就够了?
  20. 经典名言名句(摘抄)

热门文章

  1. 智慧课堂师生通过什么互动
  2. 辰颐物语系统(开发、奖励规则)
  3. 故障案例 | 慢SQL引发MySQL高可用切换排查全过程
  4. 中国15家外卖O2O大盘点-2014
  5. Flutter的基础知识之Dart语法
  6. 零基础学Python 掌握这些让你一个月上手做项目
  7. 计算机网络(谢希仁-第八版)第五章习题全解
  8. win7安装android驱动失败怎么办,win7安装不了手机驱动如何修复
  9. 【接口篇 / Wan】(7.0) ❀ 02. 配置路由器上网 ❀ FortiGate 防火墙
  10. 蓝牙室内定位方案-灵思科