download:Dubbo 3 深度分析 – 透过源码意识你
输入:
2006-08-30
2006-09-03
(2)roll 方法
cal.set(Calendar.YEAR,2006);
cal.set(Calendar.MONTH,8);
cal.set(Calendar.DAY_OF_MONTH,3);
cal.roll(Calendar.DATE, -4);
date=cal.getTime();
System.out.println(df.format(date));
cal.roll(Calendar.DATE,4);
date=cal.getTime();
System.out.println(df.format(date));
输入:
2006-09-29
2006-09-03
可见,roll() 方法在本月内循环,个别应用 add() 方法;
6、核算两个任意时刻两头的间隔天数
(1) 传进 Calendar 指标
/
** 核算两个时刻之间相隔天数
*@paramstartday 开始时刻
*@paramendday 结束时刻
*@return
*/
publicintgetIntervalDays(Calendar startday,Calendar endday){
// 保障 startday 在 endday 之前
if(startday.after(endday)){
Calendar cal=startday;
startday=endday;
endday=cal;
}
// 分离失去两个时刻的毫秒数
longsl=startday.getTimeInMillis();
longel=endday.getTimeInMillis();
longei=el-sl;
// 依据毫秒数核算间隔天数
return(int)(ei/(1000*60*60*24));
}
(2) 传进 Date 指标
/** 核算两个时刻之间相隔天数
- @param startday 开始时刻
- @param endday 结束时刻
- @return
*/
publicintgetIntervalDays(Date startday,Date endday){
// 保障 startday 在 endday 之前
if(startday.after(endday)){
Date cal=startday;
startday=endday;
endday=cal;
}
// 分离失去两个时刻的毫秒数
longsl=startday.getTime();
longel=endday.getTime();
longei=el-sl;
// 依据毫秒数核算间隔天数
return(int)(ei/(1000*60*60*24));
}
同理,能够用雷同的方法核算出任意两个时刻相隔的小时数,分钟数,秒钟数等
注:以上方法是齐全按时刻核算,有时并不能令人满意,如:
startday=”2006-10-11 20:00:00″endday=”2006-10-12 8:00:00″
核算成绩为 0,然而咱们兴许相让核算成绩变为 1,此刻能够用如下方法实现:
在传参之前,先设定 endday 的时刻,如:
endday.set(Calendar.HOUR_OF_DAY,23);
endday.set(Calendar.MINUTE,59);
endday.set(Calendar.SECOND,59);
endday.set(Calendar.MILLISECOND,59);
这样再传进去 startday,endday,则成绩就如咱们所愿了。不过,如果嫌以上方法麻烦,能够参考以下方法:
(3) 改良准确核算相隔天数的方法
publicintgetDaysBetween (Calendar d1, Calendar d2) {if(d1.after(d2)) { // swap dates so that d1 is start and d2 is end
java.util.Calendar swap = d1;
d1 = d2;
d2 = swap;
}
intdays = d2.get(Calendar.DAY_OF_YEAR) - d1.get(Calendar.DAY_OF_YEAR);
inty2 = d2.get(Calendar.YEAR);
if(d1.get(Calendar.YEAR) != y2) {d1 = (Calendar) d1.clone();
do{days += d1.getActualMaximum(Calendar.DAY_OF_YEAR);// 失去当年的实际天数
d1.add(Calendar.YEAR,1);
}while(d1.get(Calendar.YEAR) != y2);
}
returndays;
}