日期比较对象 DayCompare 代码用到了  lombok ,如果不用,其实就是把getter / setter方法自己写一遍,还有构造方法。

  1. @Data
  2. @Builder
  3. public static class DayCompare{
  4. private int year;
  5. private int month;
  6. private int day;
  7. }
  1. /**
  2. * 计算2个日期之间相差的 相差多少年月日
  3. * 比如:2011-02-02 到 2017-03-02 相差 6年,1个月,0天
  4. * @param fromDate
  5. * @param toDate
  6. * @return
  7. */
  8. public static DayCompare dayComparePrecise(Date fromDate,Date toDate){
  9. Calendar from = Calendar.getInstance();
  10. from.setTime(fromDate);
  11. Calendar to = Calendar.getInstance();
  12. to.setTime(toDate);
  13.  
  14. int fromYear = from.get(Calendar.YEAR);
  15. int fromMonth = from.get(Calendar.MONTH);
  16. int fromDay = from.get(Calendar.DAY_OF_MONTH);
  17.  
  18. int toYear = to.get(Calendar.YEAR);
  19. int toMonth = to.get(Calendar.MONTH);
  20. int toDay = to.get(Calendar.DAY_OF_MONTH);
  21. int year = toYear - fromYear;
  22. int month = toMonth - fromMonth;
  23. int day = toDay - fromDay;
  24. return DayCompare.builder().day(day).month(month).year(year).build();
  25. }
  1. /**
  2. * 计算2个日期之间相差的 以年、月、日为单位,各自计算结果是多少
  3. * 比如:2011-02-02 到 2017-03-02
  4. * 以年为单位相差为:6年
  5. * 以月为单位相差为:73个月
  6. * 以日为单位相差为:2220天
  7. * @param fromDate
  8. * @param toDate
  9. * @return
  10. */
  11. public static DayCompare dayCompare(Date fromDate,Date toDate){
  12. Calendar from = Calendar.getInstance();
  13. from.setTime(fromDate);
  14. Calendar to = Calendar.getInstance();
  15. to.setTime(toDate);
  16. //只要年月
  17. int fromYear = from.get(Calendar.YEAR);
  18. int fromMonth = from.get(Calendar.MONTH);
  19.  
  20. int toYear = to.get(Calendar.YEAR);
  21. int toMonth = to.get(Calendar.MONTH);
  22.  
  23. int year = toYear - fromYear;
  24. int month = toYear * 12 + toMonth - (fromYear * 12 + fromMonth);
  25. int day = (int) ((to.getTimeInMillis() - from.getTimeInMillis()) / (24 * 3600 * 1000));
  26. return DayCompare.builder().day(day).month(month).year(year).build();
  27. }
  1. /**
  2. * 计算2个日期相差多少年
  3. * 列:2011-02-02 ~ 2017-03-02 大约相差 6.1 年
  4. * @param fromDate
  5. * @param toDate
  6. * @return
  7. */
  8. public static String yearCompare(Date fromDate,Date toDate){
  9. DayCompare result = dayComparePrecise(fromDate, toDate);
  10. double month = result.getMonth();
  11. double year = result.getYear();
  12. //返回2位小数,并且四舍五入
  13. DecimalFormat df = new DecimalFormat("######0.0");
  14. return df.format(year + month / 12);
  15. }

转自:https://www.sojson.com/blog/260.html

转:Java 计算2个时间相差多少年,多少个月,多少天的几种方式的更多相关文章

  1. java计算两个时间相差(天、小时、分钟、秒)

    public static Long dateDiff(String startTime, String endTime, String format, String str) { // 按照传入的格 ...

  2. java计算两个日期相差多少天

    java计算两个日期相差多少天 public class DateUtil{ public static int betweenDays(Date startDate, Date endDate ) ...

  3. Java集合(九)哈希冲突及解决哈希冲突的4种方式

    Java集合(九)哈希冲突及解决哈希冲突的4种方式 一.哈希冲突 (一).产生的原因 哈希是通过对数据进行再压缩,提高效率的一种解决方法.但由于通过哈希函数产生的哈希值是有限的,而数据可能比较多,导致 ...

  4. PHP 获取两个日期相差多少年,多少月,多少天,多少小时,并填充数组

    PHP 获取两个日期相差多少年,多少月,多少天,多少小时,并填充数组 <?php /** * 获取两个日期相差多少年,多少月,多少天,多少小时,并填充数组 * @param [type] $st ...

  5. java 判断两个时间相差的天数

    1.实现目标 输入:两个日期 输出:两个日期相差的天数 2.代码实现 方法1: 通过Calendar类的日期比较.注意:这里需要考虑一下: 日期是跨年份的,如一个是2012年,一个是2015年的   ...

  6. Java判断两个时间相差的天数

    1.实现目标 输入:两个日期 输出:两个日期相差的天数 2.代码实现 方法1: 通过Calendar类的日期比较.注意:这里需要考虑一下: 日期是跨年份的,如一个是2012年,一个是2015年的   ...

  7. js计算两个时间相差天数

     //两个时间相差天数 兼容firefox chrome    function datedifference(sDate1, sDate2) {    //sDate1和sDate2是2006-12 ...

  8. Java计算两个时间的天数差与月数差 LocalDateTime

    /**  * 计算两个时间点的天数差  * @param dt1 第一个时间点  * @param dt2 第二个时间点  * @return int,即要计算的天数差  */ public stat ...

  9. java多线程系类:基础篇:02常用的实现多线程的两种方式

    本章,我们学习"常用的实现多线程的2种方式":Thread 和 Runnable.之所以说是常用的,是因为通过还可以通过java.util.concurrent包中的线程池来实现多 ...

随机推荐

  1. struts2.1.6存在中文乱码的bug

    如题,后续版本中已解决:可以通过添加filter的方式解决.

  2. yield让代码更加简洁

    不能传入out或ref public IEnumerable<Shop> GetShop() { ; i < ; i++) { yield return new Shop { ID ...

  3. 将npm修改为cnpm

    1.更改npm的源地址 检测是否更改成功 2.用cnpm代替npm npm常用命令: npm更新:npm install -g npm npm初始化生成package.json:   npm init ...

  4. [转]深入理解/proc目录

    Linux系统上的/proc目录是一种文件系统,即proc文件系统.与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过 ...

  5. #1003 Max Sum

    http://acm.hdu.edu.cn/showproblem.php?pid=1003 给你一串数列,让你求出其中 一段连续的子数列 并且 该子数列所有数字之和最大,输出该子数列的和.起点与终点 ...

  6. HTTP常见状态码(404、400、500)等错误

    一些常见的状态码为: 200 - 服务器成功返回网页 404 - 请求的网页不存在 503 - 服务不可用 详细分解: 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码. 代码 说明 ...

  7. IOS: Xcode报 Undecleared selector Warning错误的解决方法

    Undecleared selector  Warning 是编译器报的,特别是升级到IOS7 默认PROJ设定的时候,会出现这种问题,如果从代码上看语法完全没有问题,那么就可以在Xcode里面设置禁 ...

  8. CI框架3.x 之实现前后端分离

    一.建立合理的目录结构 admin与home为后台和前台的控制器和模板文件夹 二.定义前后台视图路径常量 在constants.php中添加如下代码: //定义前台视图路径常量 define('HOM ...

  9. MHA的MySQL高可用方案实战

    功能: 1)master的故障切换(keepalived VIP的飘移) 2)主从复制角色的提升和重新转向 其中master 对外提供写服务,备选master2(实际的slave提供读服务,slave ...

  10. JavaScript day4(条件语句和条件运算符)

    1. 布尔值 布尔值要么是 true 要么是 false .它非常像电路开关, true 是“开”,false 是“关”.这两种状态是互斥的. 2. if 语句 if 语句用于在代码中做条件判断.关键 ...