개발/Java

[Java] 특정 날짜 기간 출력하기

hojak99 2018. 5. 31. 17:02

특정 날짜 기간에 대한 데이터를 조회하는 코드이다.


예를 들어보자~

2018.04.10 ~ 2018.06.09 까지의 대한 날짜에 대한 데이터를 모두 출력하고 싶다. 데이터는 다음과 같이 출력이 되어야 한다.


2018.04.10

 ㅎㅇ

2018.04.11

 ㅂㅇ

~~~

 

2018.04.30 

 ㅇㅈ

~~

 

2018.05.01

 

~~

 

2018.05.31

 ㅃㅇ

~~ 

 

2018.06.09

 ㄱㅁㄸ


우선 중간에 달에 대한 마지막 날짜를 알아야 하며, 연도가 다를 때도 생각해보야 한다.


    
SimpleDateFormat currentDate = new SimpleDateFormat("yyyyMMdd");
Date date = new Date();

// 해당 월의 마지막 날짜를 구하기 위함
date = currentDate.parse(currentDate.format(date));

Calendar cal = Calendar.getInstance();

int startYear = Integer.parseInt(searchVO.getSearchSdate().substring(0,4));			// 시작년도
int endYear = Integer.parseInt(searchVO.getSearchEdate().substring(0,4));			// 끝 년도

int startMonth = Integer.parseInt(searchVO.getSearchSdate().substring(4,6));			// 시작 월
int endMonth = Integer.parseInt(searchVO.getSearchEdate().substring(4,6));			// 끝 월

int startDay = Integer.parseInt(searchVO.getSearchSdate().substring(6,8));			// 시작 일
int endDay = Integer.parseInt(searchVO.getSearchEdate().substring(6,8));			// 끝 일


// ~년 계산
for(int y = startYear; y <= endYear; ++y){

    int tempStartMonth;
    int tempEndMonth;
    
    // 시작년도와 끝년도가 다를 경우 시작년도는 1월, 마지막 달을 12월로 잡도록 함
    if(startYear != endYear) {
        if(y == startYear) {
            tempStartMonth = startMonth;
            tempEndMonth = 12;
        } else if(y == endYear) {
            tempStartMonth = 1;
            tempEndMonth = endMonth;	
        } else {
            tempStartMonth = 1;
            tempEndMonth = 12;
        }
    } else {
        tempStartMonth = startMonth;
        tempEndMonth = endMonth;
    }
    
    // 달 계산 
    for(int m = tempStartMonth; m <= tempEndMonth; ++m) {
        
        cal.setTime(new Date(y, m+1, 1));
        
        int tempStartDay = 0;
        int tempEndDay = 0;
        
        // 첫년도에의 첫 달은 검색한 일로 셋팅
        if(startYear == endYear) {
            if(endMonth == startMonth) {
                tempStartDay = startDay;
                tempEndDay = endDay;
            } else if(startMonth != endMonth) {
                if(m == tempStartMonth) {
                    tempStartDay = startDay;
                    tempEndDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
                } else if(m == tempEndMonth) {
                    tempStartDay = 1;
                    tempEndDay = endDay;
                } else {
                    tempStartDay = 1;
                    tempEndDay = 1;
                }
            }
        } else {
            if(y == startYear) {
                tempStartDay = startDay;
                tempEndDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
            } else if(y != endYear) {
                tempStartDay = 1;
                tempEndDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
            } else if(y == endYear) {
                if(m == endMonth) {
                    tempStartDay = 1;
                    tempEndDay = endDay;	
                } else {
                    tempStartDay = 1;
                    tempEndDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
                }
            }	
        }
        
        
        String inputMonth;

        if(m < 10)
            inputMonth = "0"+m;
        else 
            inputMonth = String.valueOf(m);
        
        // 일 계산
        for(int i=tempStartDay; i<=tempEndDay; ++i){
            
            String day = y+"-"+inputMonth+"-";
            
            if(i<10) {
                day += "0"+i;
            } else {
                day += i;
            }
        }
    }
}


깔끔띠

반응형