在java中如何获得上个月的周数,从星期一开始的一周
cal.setFirstDayOfWeek(Calendar.MONDAY);
cal
是Calendar
实例
如果一周的第一天不是星期一,则返回 0。所以上周必须算上前几个月,这是我的要求。
你的问题不是很清楚,但可能你正在寻找这样的东西:
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);
又快又脏(鉴于我在上面的评论中提出的要求):
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);
}
如果你想计算上个月的所有星期一,你是:
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;
}