最近项目中有这样的需求:根据租赁开始时间租赁结束时间计算租期x年x月x日,

相同的需求还有根据出生日期计算年龄等等......

例如:开始日期 2020年7月24日  结束日期 2021年9月3日  租期 1年1月11日;

开始日期 2020年7月24日  结束日期 2021年7月24日  租期 0年0月1日;

网上看了很多计算方法,包括apache的commons-lang3下的DurationFormatUtils.formatPeriod方法在计算某些日期下也是计算不正确总是少一天或者两天。后来经过一番斗争之后,发现了新大陆,三四十行代码就解决了问题。直接上代码,还请各位大神多多指教。

public static int[] betweenOfDate(Date start, Date end) {

Calendar cStart = Calendar.getInstance();

cStart.setTime(start);

Calendar cEnd = Calendar.getInstance();

cEnd.setTime(end);

cEnd.add(Calendar.DATE,1);

Calendar cTemp = Calendar.getInstance();//用于记录循环增加1之前的时间变量

int year =0;

while (true) {//计算 年

cTemp.setTime(cStart.getTime());

cStart.add(Calendar.YEAR,1);

if (cStart.getTimeInMillis() <= cEnd.getTimeInMillis()) {

year++;

}else {

cStart.setTime(cTemp.getTime());

break;

}

}

int month =0;

while (true) {//计算 月

cTemp.setTime(cStart.getTime());

cStart.add(Calendar.MONTH,1);

if (cStart.getTimeInMillis() <= cEnd.getTimeInMillis()) {

month++;

}else {

cStart.setTime(cTemp.getTime());

break;

}

}

int day =0;

while (true) {//计算 日

cTemp.setTime(cStart.getTime());

cStart.add(Calendar.DATE,1);

if (cStart.getTimeInMillis() <= cEnd.getTimeInMillis()) {

day++;

}else {

cStart.setTime(cTemp.getTime());

break;

}

}

return new int[]{year, month, day};

}

java 根据时间范围自动算间隔_Java根据开始时间结束时间计算时间间隔 x年x月x日...相关推荐

  1. Java的时间为何从1970年1月1日开始

    上周有同事问到几个和时间相关的问题,非常有意思,之前也没怎么想过,不知道大家是否想过这几个问题 在mac下发现System.nanoTime()在JDK7和JDK8下输出的值怎么完全不一样 Syste ...

  2. JAVA 给定开始时间和结束时间计算天数

    1.给定开始时间和结束时间计算天数 package com.ceshi;import java.text.ParseException; import java.text.SimpleDateForm ...

  3. java怎么根据新历算农历_Java给定公历日期计算相应农历/阴历日期

    import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...

  4. java线程池最大线程数_Java并发(八)计算线程池最佳线程数

    目录 一.理论分析 二.实际应用 为了加快程序处理速度,我们会将问题分解成若干个并发执行的任务.并且创建线程池,将任务委派给线程池中的线程,以便使它们可以并发地执行.在高并发的情况下采用线程池,可以有 ...

  5. 为什么计算机时间要从1970年1月1日开始算起

    1970年1月1日... 为什么计算机时间和众多的编程语言的时间都要从1970年1月1日开始算起呢,时间计时起点到底为什么是1970年1月1号呢?我想大部分接触过计算机的人都知道,但大家几乎都没有想过 ...

  6. 为什么计算机时间要从1970年1月1日开始算起?

    今天我们来讨论一个非常有意思的事,那就是你知道为什么计算机时间和众多的编程语言的时间都要从1970年1月1日开始算起呢,时间计时起点到底为什么是 1970年1月1号呢?我想大家应该都知道,但是我估计大 ...

  7. 为什么java中的时间是从1970年1月1日开始的?

    问题:Date date = new Date(0); System.out.println(date); 打印出来的结果:Thu Jan 01 08:00:00 CST 1970 也是1970年1月 ...

  8. 计算机时间、unix时间、linux时间、java时间为何以1970年1月1日为原点?从1970年1月1日开始计算?

    最初计算机操作系统是32位,而时间也是用32位表示. System.out.println(Integer.MAX_VALUE); 2147483647 Integer在JAVA内用32位表示,因此3 ...

  9. java根据开始时间和结束时间计算中间间隔日期

    import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; impo ...

最新文章

  1. 【深度学习】深度神经网络后处理之全连接CRFs(DenseCRF)
  2. 2010年9月14日佛山大沥机楼网络故障日志
  3. jsp文件通常用common_29.jsp-动态生活之用Commons-FileUpload组件控制文件上传
  4. vlc框架流程解析(转)
  5. Asp.net Core中SignalR Core预览版的一些新特性前瞻,附源码(消息订阅与发送二进制数据)
  6. spring注解注入IOC
  7. 一个application多个 URL
  8. Gradle 下载不了
  9. NSURLErrorDomain 对照
  10. sql 中WHERE字句中使用case when then
  11. xpath用于HTML文档通过元素,通过Xpath定位元素
  12. ofo容器pass架构分享
  13. 如何通过安全的网络防御XcodeGhost?
  14. 搭建自动化测试平台(selenium+testng+maven+svn+Jenkins)【转自galen2016】
  15. WIN7常见问题与分析
  16. Bzoj4598: [Sdoi2016]模式字符串 点分治 哈希
  17. 代理平台kb-proxy:注册与登录【三】
  18. php标签打印,html - 如何在php中创建打印标签? - SO中文参考 - www.soinside.com
  19. 团队开发之:代码规范说明
  20. PXE 网络安装 windows 或 linux

热门文章

  1. 快速排序 挖坑_由浅入深玩转快速排序算法
  2. apache图片cache容量_apache利用mod_cache缓存图片等
  3. gem for onenote安装教程
  4. 节点式光端机与点对点式光端机的区别
  5. 工业以太网交换机可以家用吗?
  6. 数字光端机和模拟视频光端机的六个不同点
  7. 【渝粤题库】广东开放大学 综合英语1 形成性考核 (2)
  8. 太极虚拟服务器,太极 中标 云服务器
  9. emacs c语言,如何利用Emacs来调试C++程序
  10. oracle impdp导入时卡住,Oracle:impdp导入等待statement suspended, wait error to be cleared