java 根据时间范围自动算间隔_Java根据开始时间结束时间计算时间间隔 x年x月x日...
最近項(xiàng)目中有這樣的需求:根據(jù)租賃開始時(shí)間租賃結(jié)束時(shí)間計(jì)算租期x年x月x日,
相同的需求還有根據(jù)出生日期計(jì)算年齡等等......
例如:開始日期 2020年7月24日 ?結(jié)束日期 2021年9月3日 ?租期 1年1月11日;
開始日期 2020年7月24日 ?結(jié)束日期 2021年7月24日 ?租期 0年0月1日;
網(wǎng)上看了很多計(jì)算方法,包括apache的commons-lang3下的DurationFormatUtils.formatPeriod方法在計(jì)算某些日期下也是計(jì)算不正確總是少一天或者兩天。后來經(jīng)過一番斗爭之后,發(fā)現(xiàn)了新大陸,三四十行代碼就解決了問題。直接上代碼,還請各位大神多多指教。
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();//用于記錄循環(huán)增加1之前的時(shí)間變量
int year =0;
while (true) {//計(jì)算 年
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) {//計(jì)算 月
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) {//計(jì)算 日
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};
}
總結(jié)
以上是生活随笔為你收集整理的java 根据时间范围自动算间隔_Java根据开始时间结束时间计算时间间隔 x年x月x日...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java模拟网易邮箱登录_求赐教:网易邮
- 下一篇: java web 静态_「Java We