62,636
社区成员




public static void main(String args[]) {
Calendar dayBegin = Calendar.getInstance();
Calendar dayEnd = Calendar.getInstance();
dayBegin.set(2007, 0, 5);
dayEnd.set(2008, 0, 4);
System.out.println(MonthDays(dayBegin, dayEnd)); //12
dayBegin.set(2008, 1, 29);
dayEnd.set(2009, 1, 28);
System.out.println(MonthDays(dayBegin, dayEnd)); //12
dayBegin.set(2008, 1, 29);
dayEnd.set(2009, 1, 27);
System.out.println(MonthDays(dayBegin, dayEnd));//11
dayBegin.set(2008, 0, 31);
dayEnd.set(2008, 1, 29);
System.out.println(MonthDays(dayBegin, dayEnd)); //1
dayBegin.set(2008, 0, 31);
dayEnd.set(2008, 1, 28);
System.out.println(MonthDays(dayBegin, dayEnd)); //0
dayBegin.set(2009, 0, 31);
dayEnd.set(2009, 1, 28);
System.out.println(MonthDays(dayBegin, dayEnd)); //1
dayBegin.set(2009, 0, 1);
dayEnd.set(2009, 0, 31);
System.out.println(MonthDays(dayBegin, dayEnd)); //1
dayBegin.set(2009, 0, 2);
dayEnd.set(2009, 1, 1);
System.out.println(MonthDays(dayBegin, dayEnd)); //1
dayBegin.set(2008, 0, 31);
dayEnd.set(2008, 3, 30);
System.out.println(MonthDays(dayBegin, dayEnd)); //3
dayBegin.set(2008, 0, 31);
dayEnd.set(2008, 3, 29);
System.out.println(MonthDays(dayBegin, dayEnd)); //2
}
public static int MonthDays(Calendar dayBegin, Calendar dayEnd) {
//初始计算
int result= dayEnd.get(Calendar.MONTH) +dayEnd.get(Calendar.YEAR)*12
-dayBegin.get(Calendar.MONTH) - dayBegin.get(Calendar.YEAR)*12;
//赋值结束日期的月末
Calendar lastDayInEndMonth=Calendar.getInstance();
lastDayInEndMonth.set(dayEnd.get(Calendar.YEAR),
dayEnd.get(Calendar.MONTH),1);
lastDayInEndMonth.add(Calendar.MONTH,1);
lastDayInEndMonth.add(Calendar.DATE,-1);
// 开始在1日,结束在月末,加一个月
if((lastDayInEndMonth.get(Calendar.DATE)==dayEnd.get(Calendar.DATE))&&(dayBegin.get(Calendar.DATE)==1)){
result += 1;
}
// 如果结束的日期+1<开始日期 并且结束的日期不为月底就扣除一个月
if((dayEnd.get(Calendar.DATE)+1 < dayBegin.get(Calendar.DATE))&& !(lastDayInEndMonth.get(Calendar.DATE)==dayEnd.get(Calendar.DATE))){
result -=1;
}
return result;
}
public static int MonthDays(Calendar dayBegin, Calendar dayEnd) {
//初始计算
int result= dayEnd.get(Calendar.MONTH) +dayEnd.get(Calendar.YEAR)*12
-dayBegin.get(Calendar.MONTH) - dayBegin.get(Calendar.YEAR)*12;
//赋值开始和结束那天的月末
Calendar dayBeginMonthEndDay=Calendar.getInstance();
dayBeginMonthEndDay.set(dayBegin.get(Calendar.YEAR),
dayBegin.get(Calendar.MONTH),1);
dayBeginMonthEndDay.add(Calendar.MONTH,1);
dayBeginMonthEndDay.add(Calendar.DATE,-1);
Calendar dayEndMonthEndDay=Calendar.getInstance();
dayEndMonthEndDay.set(dayEnd.get(Calendar.YEAR),
dayEnd.get(Calendar.MONTH),1);
dayEndMonthEndDay.add(Calendar.MONTH,1);
dayEndMonthEndDay.add(Calendar.DATE,-1);
System.out.println(dayEndMonthEndDay.get(Calendar.DATE)-dayEnd.get(Calendar.DATE));
System.out.println(dayBeginMonthEndDay.get(Calendar.DATE)-dayBegin.get(Calendar.DATE));
//如果开始在第一天,结束在月末,加一个月
if((dayEndMonthEndDay.get(Calendar.DATE)==dayEnd.get(Calendar.DATE)) && (dayBegin.get(Calendar.DATE)==1 )){
result += 1;
return result;
}
// 如果结束那天距离月末的天数大于开始那天距离月末的天数-1
// 那么需要扣除一个月
if(dayEndMonthEndDay.get(Calendar.DATE)-dayEnd.get(Calendar.DATE)-1
>dayBeginMonthEndDay.get(Calendar.DATE)-dayBegin.get(Calendar.DATE))
{
result -= 1;
}
return result;
}
public static int MonthDays(Date rcsj,Date dqrq){
int b1 = 0;
Calendar crcsj =Calendar.getInstance();
Calendar cdqrq =Calendar.getInstance();
crcsj.setTime(rcsj);
cdqrq.setTime(dqrq);
int month = (cdqrq.get(Calendar.YEAR) * 12 + cdqrq.get(Calendar.MONTH)) - (crcsj.get(Calendar.YEAR) * 12 + crcsj.get(Calendar.MONTH));
crcsj.add(Calendar.MONTH, month);
if(crcsj.after(cdqrq)){
b1 = month-1;
}else b1 = month;
return b1;
}