java 根据时间范围自动算间隔_Java根据开始时间结束时间计算时间间隔 x年x月x日...
最近项目中有这样的需求:根据租赁开始时间租赁结束时间计算租期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日...相关推荐
- Java的时间为何从1970年1月1日开始
上周有同事问到几个和时间相关的问题,非常有意思,之前也没怎么想过,不知道大家是否想过这几个问题 在mac下发现System.nanoTime()在JDK7和JDK8下输出的值怎么完全不一样 Syste ...
- JAVA 给定开始时间和结束时间计算天数
1.给定开始时间和结束时间计算天数 package com.ceshi;import java.text.ParseException; import java.text.SimpleDateForm ...
- java怎么根据新历算农历_Java给定公历日期计算相应农历/阴历日期
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...
- java线程池最大线程数_Java并发(八)计算线程池最佳线程数
目录 一.理论分析 二.实际应用 为了加快程序处理速度,我们会将问题分解成若干个并发执行的任务.并且创建线程池,将任务委派给线程池中的线程,以便使它们可以并发地执行.在高并发的情况下采用线程池,可以有 ...
- 为什么计算机时间要从1970年1月1日开始算起
1970年1月1日... 为什么计算机时间和众多的编程语言的时间都要从1970年1月1日开始算起呢,时间计时起点到底为什么是1970年1月1号呢?我想大部分接触过计算机的人都知道,但大家几乎都没有想过 ...
- 为什么计算机时间要从1970年1月1日开始算起?
今天我们来讨论一个非常有意思的事,那就是你知道为什么计算机时间和众多的编程语言的时间都要从1970年1月1日开始算起呢,时间计时起点到底为什么是 1970年1月1号呢?我想大家应该都知道,但是我估计大 ...
- 为什么java中的时间是从1970年1月1日开始的?
问题:Date date = new Date(0); System.out.println(date); 打印出来的结果:Thu Jan 01 08:00:00 CST 1970 也是1970年1月 ...
- 计算机时间、unix时间、linux时间、java时间为何以1970年1月1日为原点?从1970年1月1日开始计算?
最初计算机操作系统是32位,而时间也是用32位表示. System.out.println(Integer.MAX_VALUE); 2147483647 Integer在JAVA内用32位表示,因此3 ...
- java根据开始时间和结束时间计算中间间隔日期
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; impo ...
最新文章
- 【深度学习】深度神经网络后处理之全连接CRFs(DenseCRF)
- 2010年9月14日佛山大沥机楼网络故障日志
- jsp文件通常用common_29.jsp-动态生活之用Commons-FileUpload组件控制文件上传
- vlc框架流程解析(转)
- Asp.net Core中SignalR Core预览版的一些新特性前瞻,附源码(消息订阅与发送二进制数据)
- spring注解注入IOC
- 一个application多个 URL
- Gradle 下载不了
- NSURLErrorDomain 对照
- sql 中WHERE字句中使用case when then
- xpath用于HTML文档通过元素,通过Xpath定位元素
- ofo容器pass架构分享
- 如何通过安全的网络防御XcodeGhost?
- 搭建自动化测试平台(selenium+testng+maven+svn+Jenkins)【转自galen2016】
- WIN7常见问题与分析
- Bzoj4598: [Sdoi2016]模式字符串 点分治 哈希
- 代理平台kb-proxy:注册与登录【三】
- php标签打印,html - 如何在php中创建打印标签? - SO中文参考 - www.soinside.com
- 团队开发之:代码规范说明
- PXE 网络安装 windows 或 linux
热门文章
- 快速排序 挖坑_由浅入深玩转快速排序算法
- apache图片cache容量_apache利用mod_cache缓存图片等
- gem for onenote安装教程
- 节点式光端机与点对点式光端机的区别
- 工业以太网交换机可以家用吗?
- 数字光端机和模拟视频光端机的六个不同点
- 【渝粤题库】广东开放大学 综合英语1 形成性考核 (2)
- 太极虚拟服务器,太极 中标 云服务器
- emacs c语言,如何利用Emacs来调试C++程序
- oracle impdp导入时卡住,Oracle:impdp导入等待statement suspended, wait error to be cleared