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;}