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 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;
}
迅速で汚い(上記の私のコメントで求められている要件を考えると):
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);
}