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으로 찍어놔서 확인해보시고 오류있으시면 댓글달아주세여..
제가확인할때는 괜찮았습니다.