0

在java中如何获得上个月的周数,从星期一开始的一周

cal.setFirstDayOfWeek(Calendar.MONDAY);

calCalendar实例

如果一周的第一天不是星期一,则返回 0。所以上周必须算上前几个月,这是我的要求。

4

4 回答 4

1

你的问题不是很清楚,但可能你正在寻找这样的东西:

Calendar cal = Calendar.getInstance();
cal.setTime(new Date()); // today's date
// previous month from today
cal.add(Calendar.MONTH, -1);
// get to the 1st week
cal.add(Calendar.DATE, -7 * (cal.get(Calendar.DAY_OF_MONTH)/7));
// Get to the 1st Mon of last month
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
// # of days in last month
int maxDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
// print # of week since Mon of last month
int numWeeks = ((maxDay-cal.get(Calendar.DATE))/7)+1;
System.out.printf("# of weeks from Mon in last month: %d%n", numWeeks);
于 2012-11-05T18:45:40.230 回答
0

又快又脏(鉴于我在上面的评论中提出的要求):

public static void main(String[] args) {       

    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.MONTH, -1);
    cal.set(Calendar.DAY_OF_MONTH,1);
    while ( cal.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY ) {
        cal.add(Calendar.DAY_OF_WEEK, 1);
    }
    int startingMonth = cal.get(Calendar.MONTH);
    int numberOfWeeks = 0;

    while (cal.get(Calendar.MONTH) == startingMonth ) {          
        cal.add(Calendar.WEEK_OF_MONTH, 1);            
        numberOfWeeks++;                        
    }
    System.out.println("weeks in last month:" + numberOfWeeks);
}
于 2012-11-05T18:33:50.880 回答
0

如果你想计算上个月的所有星期一,你是:

public int getNofWeeks() {
    Calendar cal = Calendar.getInstance();        
    while (cal.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) {
        cal.roll(Calendar.DATE, false);
    }        
    int currentMonth = cal.get(Calendar.MONTH);
    int previousMonth = (currentMonth + 12 - 1) % 12;
    int prePreviousMonth = (currentMonth + 12 - 2) % 12;
    int nofWeeks = 0;        
    do {
        int month = cal.get(Calendar.MONTH);
        if (month == previousMonth) {
            nofWeeks++;
        }
        if (month == prePreviousMonth) {
            break;
        }
        cal.roll(Calendar.WEEK_OF_YEAR, false);            
    } while (true);        
    return nofWeeks;
}
于 2012-11-05T19:15:02.930 回答
0
于 2016-09-11T19:56:38.807 回答