import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class Exercise10_01 {
public static void main(String[] args) {
Calendar sCal = Calendar.getInstance();
Calendar eCal = Calendar.getInstance();
boolean newMon = false;
// 연도를 2020년 1월 1일로 설정 (Month는 -1 이므로 하나씩 낮게 설정)
sCal.set(2020, 0, 1);
eCal.set(2020, 1, 1);
eCal.add(Calendar.DATE, -1);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd은 F번째 E요일 입니다.");
int count = 0;
int IS_SUNDAY = 0;
IS_SUNDAY = sCal.get(Calendar.DAY_OF_WEEK);
int END_DATE = eCal.get(Calendar.DATE);
int i = 0;
for (i = 1; i <= END_DATE; i++) {
newMon = false;
IS_SUNDAY = sCal.get(Calendar.DAY_OF_WEEK);
if (IS_SUNDAY == 1) {
count++;
}
if (count == 2) {
Date date = new Date(sCal.getTimeInMillis());
System.out.println(df.format(date));
if (sCal.get(Calendar.MONTH) == 11) {
break;
} else {
count = 0;
sCal.add(Calendar.MONTH, 1);
sCal.set(Calendar.DATE, 1);
eCal.add(Calendar.MONTH, 1);
eCal.set(Calendar.DATE, 1);
eCal.add(Calendar.DATE, -1);
newMon = true;
END_DATE = eCal.get(Calendar.DATE);
i = 1;
}
}
if (newMon != true) {
sCal.add(Calendar.DATE, 1);
}
}
}
}
그래서 newMon boolean 타입 변수를 선언해서, 월이 바뀔때마다 값을 true줘서, 다음 루프를 돌때 날짜를 더해주도록 작성하였다.
또, i는 계속 증가하기 때문에 i의 값을 달이 바뀌면 다시 1로 초기화 해서 계속 루프가 돌도록 해주었다.
중첩 if문을 사용해서 12월이 되서 두번 째 일요일이 출력되면, 2020년의 마지막 2번째 일요일이 되므로 즉시 반복문을 종료하도록 하였다.