본문 바로가기

프로그램/java

[JAVA]DateUtils 를 이용한 스트링 형태의 날짜 비교

반응형

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

https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/time/DateUtils.html