[java]자바 날짜 계산(SimpleDateFormat, date, format) :: 개발/일상_Mr.lee

[java]자바 날짜 계산(SimpleDateFormat, date, format)

Posted by Mr.mandu.
2016. 5. 26. 21:00 개발/java,spring
안녕하세요.
오늘은 자바 날짜 계산 하는 법에 대해서 포스팅하겠습니다.

사실...플젝을 진행하면서 날짜를 계산해야 하는데...은근히 어렵더라고요...?
예전에는 그냥 인터넷에 찾아서 붙여넣기 하면서 했었는데...ㅋㅋㅋ

그래서 이왕 하는김에  포스팅까지 하려고 합니다.

저의 진행 방법은!
자바의 String 형을 날짜로 변환하여
오늘의 날짜와의 차이를 구하려고 합니다.

소스 보시기전에
SimpleDateFormat, Date 형에 대해서 알아보시면 좋을 것 같습니다.
소스를 보면서 이해가 가실 테지만요.

그럼 소스 확인해 보겠습니다.
---------------------

String testDate = "20160421";
		
SimpleDateFormat  formatter01 = new SimpleDateFormat("yyyy년 MM월 dd일 hh시 mm분 ss초");
SimpleDateFormat  formatter02 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
SimpleDateFormat  formatter03 = new SimpleDateFormat("yyyyMMdd");
SimpleDateFormat  formatter04 = new SimpleDateFormat("yyyy-MM-dd");
        
//현재 날짜 구하기
String todate01=  formatter01.format(new Date());
String todate02 =  formatter02.format(new Date());
String todate03 =  formatter03.format(new Date());
String todate04 =  formatter04.format(new Date());
        
logger.info("현재시간 년월일 = " + todate01);
logger.info("현재시간 년월일 = " + todate02);
logger.info("현재시간 년월일 = " + todate03);
       
Date todate_date =  formatter03.parse(todate03);
Date test_date =  formatter03.parse(testDate);
       
logger.info(todate_date + "====== " + test_date);
long diff = todate_date.getTime() - test_date.getTime();
// 시간차이를 시간,분,초를 곱한 값으로 나누면 하루 단위가 나옴
long diffDays = diff / (24 * 60 * 60 * 1000);
		
logger.info("날짜계산차이 : " + diff);
logger.info("일차이 : " + diffDays);
logger.info("년차이 : " + diffDays / 365);


그리고 SimplDateFormat을 여러 종류를 선언하여 테스트해 볼 예정입니다.

SimpleDateFormat formatter01 = new SimpleDateFormat("yyyy년 MM월 dd일 hh시 mm분 ss초"); SimpleDateFormat formatter02 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); SimpleDateFormat formatter03 = new SimpleDateFormat("yyyyMMdd"); SimpleDateFormat formatter04 = new SimpleDateFormat("yyyy-MM-dd");


//현재 날짜 구하기
String todate01=  formatter01.format(new Date());

--> Date 형식을 format을 이용하여 String 형으로 변환하였습니다.

Date todate_date =  formatter04.parse(todate04);
Date test_date =  formatter04.parse(testDate);

---> 이부분은 날짜의 계산을 위해 Date 형식으로 형변환 한다는 의미 입니다.

이에 결과는

로그가 찍힌 것을 보시면
현재의 일시를 확인 할수 있는데
format별로 다르게 찍히는걸 확인 할 수 있습니다. 

그 아래 부분은
일 차이, 년 차이를 확인 하실수 있습니다.

아 또한 일수! 년수! 를 구하기위해 
getTime()함수를 이용한 점과
(24 * 60 * 60 *1000) 으로 나눈부분!
365로 나눈 부분도 유심히 볼 필요가 있습니다.


String testDate의 형식을 달리하여 테스트 해 보았습니다.
이번엔 형식이 일시에 '-' 가 들어가있는 형태입니다.
String testDate = "2016-04-21";
		
SimpleDateFormat  formatter01 = new SimpleDateFormat("yyyy년 MM월 dd일 hh시 mm분 ss초");
SimpleDateFormat  formatter02 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
SimpleDateFormat  formatter03 = new SimpleDateFormat("yyyyMMdd");
SimpleDateFormat  formatter04 = new SimpleDateFormat("yyyy-MM-dd");
        
//현재 날짜 구하기
String todate01=  formatter01.format(new Date());
String todate02 =  formatter02.format(new Date());
String todate03 =  formatter03.format(new Date());
String todate04 =  formatter04.format(new Date());
        
logger.info("현재시간 년월일 = " + todate01);
logger.info("현재시간 년월일 = " + todate02);
logger.info("현재시간 년월일 = " + todate03);
        
Date todate_date = formatter04.parse(todate04);
Date test_date = formatter04.parse(testDate);
long diff = todate_date.getTime() - test_date.getTime();
// 시간차이를 시간,분,초를 곱한 값으로 나누면 하루 단위가 나옴
long diffDays = diff / (24 * 60 * 60 * 1000);

logger.info(todate_date + "====== " + test_date);
logger.info("날짜계산차이 : " + diff);
logger.info("일차이 : " + diffDays);
logger.info("년차이 : " + diffDays / 365);

결과를 보시면 이전과 똑같이 출력되었다는걸 확인 할 수 있습니다.