download:Dubbo 3 深度分析 - 透过源码意识你

输入:

2006-08-302006-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-292006-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;}