网上很多地方贴出来的代码有BUG,如下所示:
public static int getWeekendNumber(Date date)
{
Calendar periodMonth = Calendar.getInstance();
periodMonth.setTime(date);
int hyear = periodMonth.get(Calendar.YEAR);
int hmonth = periodMonth.get(Calendar.MONTH);
Calendar calendar = new GregorianCalendar(hyear, hmonth, 1);
int i = 1;
int sum = 0;
while (calendar.get(Calendar.MONTH) < hmonth + 1) {
calendar.set(Calendar.WEEK_OF_YEAR, i++);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
if (calendar.get(Calendar.MONTH) == hmonth) {
//System.out.println("星期日:" + calendar.get(Calendar.DATE));
sum++;
}
calendar.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
if (calendar.get(Calendar.MONTH) == hmonth) {
//System.out.printf("星期六:" + calendar.get(Calendar.DATE));
sum++;
}
disPlay(calendar);
}
return sum;
}
以上代码取12月的周末数量就会出现死循环情况。
正确的代码如下:
public static int getWeekendNumber(Date date)
{
Calendar periodMonth = Calendar.getInstance();
periodMonth.setTime(date);
int year = periodMonth.get(Calendar.YEAR);
int month = periodMonth.get(Calendar.MONTH); //0~11为1至12月
int sum=0;
Calendar calendar = new GregorianCalendar(year, month, 1);
do {
int day = calendar.get(Calendar.DAY_OF_WEEK);
if (day == Calendar.SATURDAY || day == Calendar.SUNDAY) {
sum++;
}
calendar.add(Calendar.DAY_OF_YEAR, 1);
} while (calendar.get(Calendar.MONTH) == month);
return sum;
}
记录,记录,记录。