DateUtils 를 이용한 스트링 형태의 날짜 비교
JAVA 에서 문자열로 받은 두개의 스트링 날짜값 간의 차이를 분단위 이상으로 변환하여 결과를구해야 한다고 한다.
예전에 Calendar 공부할 때는 간단히 되었던 것 같은데 막상 하려니 잘 안되었다.-_-;;;
(어떻게 했었지;; 기록도 해두지 않아 자료도 없다.ㅠㅠ)
검색을 해도 깔끔하게 나온 건 없었다.
(이런건 사실 직접 코딩해서 만들어야 실력이 느는데.ㅠㅠ)
Apache 의 commons 에 util 이 있을 것 같아서 찾아보니 DateUtils 클래스가 있었다.
(commons-lang-x.x.jar)
원래는 truncatedCompareTo 메서드를 활용하려고 했느나 commons-lang-2.4.jar 에는 메서드가 없는 관계로 getFragmentInSeconds 를 사용하여 각각 두개의 스트링 날짜값에 대한 second 값을 구한 후 가공하여 시분초로 나타내었다.
소스
import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;
import org.apache.commons.lang.time.DateUtils;
public class TestCal {
public static void main(String[] args) throws ParseException {
String[] datePatArr = new String[1];
//hh : 12시간 단위, HH : 24시간 단위 인듯함
datePatArr[0] = "HHmm";
//같은 날에 시간만 다를 경우
Date d1 = DateUtils.parseDate("1350", datePatArr);
Date d2 = DateUtils.parseDate("1340", datePatArr);
System.out.println("d1 : " + d1);
System.out.println("d2 : " + d2);
long sec1 = DateUtils.getFragmentInSeconds(d1, Calendar.DATE);
long sec2 = DateUtils.getFragmentInSeconds(d2, Calendar.DATE);
System.out.println("sec1 : " + sec1);
System.out.println("sec2 : " + sec2);
//다른 날짜에 시간도 다른경우
datePatArr[0] = "yyyyMMddHHmmss";
Date d3 = DateUtils.parseDate("20150918155010", datePatArr);
Date d4 = DateUtils.parseDate("20150917124010", datePatArr);
System.out.println("d3 : " + d3);
System.out.println("d4 : " + d4);
long sec3 = DateUtils.getFragmentInSeconds(d3, Calendar.MONTH);
long sec4 = DateUtils.getFragmentInSeconds(d4, Calendar.MONTH);
System.out.println("sec3 : " + sec3);
System.out.println("sec4 : " + sec4);
System.out.println("날짜 차이(초) : " + (sec3 - sec4) );
System.out.println("날짜 차이(분) : " + ((sec3 - sec4) / 60) );
System.out.println("날짜 차이(시) : " + ((sec3 - sec4) / 60 / 60) );
System.out.println("날짜 차이(일) : " + ((sec3 - sec4) / 60 / 60 / 24) );
}
}
결과
d1 : Thu Jan 01 13:50:00 KST 1970
d2 : Thu Jan 01 13:40:00 KST 1970
sec1 : 49800
sec2 : 49200
d3 : Fri Sep 18 15:50:10 KST 2015
d4 : Thu Sep 17 12:40:10 KST 2015
sec3 : 1612210
sec4 : 1514410
날짜 차이(초) : 97800
날짜 차이(분) : 1630
날짜 차이(시) : 27
날짜 차이(일) : 1
url