다음은 주어진 달의 시작일과 종료일을 계산하는 데 사용하는 코드입니다. 주 시작일은 MONDAY이고 주말 종료일은 SUNDAY라고 가정합니다. 예를 들어, 2013 년 1 월에는 5 주가 소요됩니다. 달이 일요일로 시작하는 경우 - 셋째 주 (13) - 1 월 2013 07 - 1 월 2013 - 06 월 2013 둘째 주에 31 12 월 2012 - 그 날java - 주어진 월에 대한 각 주 시작 날짜와 종료 날짜를 얻으려면
년 1 월 2013 첫 주를 무시 - 14 1 월 2013 20 1 월 2,013 넷째 주 - 21 얀 2013 27 1 월 2013 다섯째 주 - 28 1 월 2013 년 2 월 03 2013
public static void main(String[] args) {
List<List<String>> weekdates = getNumberOfWeeks(2013, Calendar.JULY);
for(List<String> weekDatesLoop:weekdates){
System.out.println("Start day: "+weekDatesLoop.get(0).toString());
System.out.println("End day: "+weekDatesLoop.get(1).toString());
}
}
public static List<List<String>> getNumberOfWeeks(int year, int month) {
System.out.println("Month Id: "+month);
month = month-1;
System.out.println("Month Id: " + month);
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
List<List<String>> weekdates = new ArrayList<List<String>>();
List<String> dates = new ArrayList<String>();
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, year);
c.set(Calendar.MONTH, month);
c.set(Calendar.DAY_OF_MONTH, 1);
dates.add(format.format(c.getTime()));
//int numOfWeeksInMonth = 1;
while (c.get(Calendar.MONTH) == month) {
//System.out.println(c.get(Calendar.DAY_OF_WEEK));
if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
dates.add(format.format(c.getTime()));
weekdates.add(dates);
}
else if (c.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) {
dates = new ArrayList<String>();
dates.add(format.format(c.getTime()));
//numOfWeeksInMonth++;
}
c.add(Calendar.DAY_OF_MONTH, 1);
}
if(dates.size() < 2){
c.add(Calendar.DAY_OF_MONTH, -1);
dates.add(format.format(c.getTime()));
weekdates.add(dates);
}
System.out.println(weekdates);
return weekdates;
}
I 아직도이 일을하고 있습니다. 누구든지이 문제를 해결하는 데 도움을 줄 수 있습니까?
더 나은 알고리즘을 답을 얻을 다음을 도달 할 때까지 반복 한 일을 추가, 쓰기, 달의 1 일부터 시작 다시 U까지가는 월요일을 찾아 6 일 추가 일요일 월말 이후; 및 포인터 : 메서드를 작은 메서드로 분할하면 코드가 훨씬 간단 해지고 더 읽기 쉽습니다. – Dariusz
@DariuszWawer 감사합니다. 나는 당신의 알고리즘을 따랐고 효과가있었습니다. – user1514499