반응형

java - 지정날짜의 월차이 차이 구하기 / 정확한 개월수 차이 구하기 / 날짜 차이 구하기 / 날짜 개월수 구하기

찾다가 오늘날짜에서의 개월수 차이 구하는 거밖에 안나와서 대충 만들었습니다.

부족하지만 필요하면 갖다쓰세요...


*윤년 계산법 = 현재년도 / 400  ( 나머지값이 0이면 29일 그외는 28일 )

*각 개월수별 범위

-3개월 89~92일

-6개월 181~184일

-12개월 365~366일


//시작

try {

String startDate = "20180101"; //시작날짜

String endDate = "20180301";  //마지막 날짜


// YYYY-MM-DD 로 만들기위해서 지우고 다시 생성해줌

startDate = startDate.replaceAll("-", "");

endDate = endDate.replaceAll("-", "");

String sd1 = startDate.substring(0, 4);

String sd2 = startDate.substring(4, 6);

String sd3 = startDate.substring(6, 8);

String ed1 = endDate.substring(0, 4);

String ed2 = endDate.substring(4, 6);

String ed3 = endDate.substring(6, 8);

startDate = sd1+"-"+sd2+"-"+sd3;

endDate = ed1+"-"+ed2+"-"+ed3;

 

// 날짜를 data타입으로 변경

SimpleDateFormat fm = new SimpleDateFormat("yyyy-MM-dd");

Date sDate = fm.parse(startDate);

Date eDate = fm.parse(endDate);

// 시간차이를 시간,분,초를 곱한 값으로 나누면 하루 단위가 나옴

long diff = eDate.getTime() - sDate.getTime();

        long diffDays = diff / (24 * 60 * 60 * 1000) ;

 

        long difMonth = (diffDays+1)/30; //총개월수 ( 대략 30으로 나눴을때 나오는 개월수 )

        long chkNum = 0; 

        

        int j=0;

        

        //개월수 체크 ( 시작한날짜월부터 위에서 대충 계산한 개월수까지 )

    //각 월별로 해당하는 월수에 맞게 더해줌

        for(int i=Integer.parseInt(sd2); j<difMonth; i++) {

        if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10 || i==12 ) {

        chkNum += 31;

        }else if(i==4 || i==6 || i==9 || i==11 ) {

        chkNum += 30;

        }

        if(i==2) {

        //윤달체크

        if( ((Integer.parseInt(sd2))%400) == 0 ) {

        chkNum+=29;

        } else {

        chkNum+=28;

        }

        }

        j++;

 if(i>12) { i=1; j=j-1;}

        }

        long allMonth = (chkNum+1)/30; //진짜 총개월수

        if(diffDays < chkNum) { 

        allMonth = allMonth-1; // 대충 구한개월수는 더많을수 있어서 1빼줘서 진짜 개월수를 구함

        }


    System.out.println("날짜차이 =" + diffDays);

    System.out.println("총 차이  =" + chkNum); //실제 차이나야하는 총일수

    System.out.println("개월수 =" + difMonth);

    System.out.println("진짜개월수 =" + allMonth);

        

} catch (Exception e) {}


감사합니다

sysout으로 찍어놔서 확인해보시고 오류있으시면 댓글달아주세여..

제가확인할때는 괜찮았습니다.

반응형

+ Recent posts