MSM8994의 화룡점정 블로그

[JAVA] Calendar 객체와 SimpleDateFormat으로 얻은 날짜 문자열을 비교하기 본문

코딩

[JAVA] Calendar 객체와 SimpleDateFormat으로 얻은 날짜 문자열을 비교하기

msm8994 2018. 7. 23. 16:30

오늘은  Calendar 객체를 통해 오늘 날짜를 구한 뒤 clone() 으로 객체를 복제합니다. 그 복제한 Calendar 객체를 하루 앞당긴 다음 각 날짜 요소를 추출하여 문자열로 바꿔보고, SimpleDateFormat 을 통해서도 바꿔봅니다. 그리고 compareTo를 이용해 어느쪽이 앞인지를 비교하는 소스입니다. 두 날짜는 같은 형식으로 짜여져있어야 합니다. 월일년이나 일월년 처럼 큰게 뒤로 가버리는 경우 비교가 되지 않습니다.

parseInt로 수로 변환해 사용하는 경우 자료형 범위 한계로 Long을 사용해야 합니다.

// 오늘 날짜와 어제 날짜를 구해서 비교하기.

    // 오늘 날짜
    Calendar today = Calendar.getInstance();
    // 어제 날짜는 오늘의 -1일
    Calendar yesterday = (Calendar) today.clone(); // 참조 복사가 아닌 객체 복제
    yesterday.add(Calendar.DAY_OF_MONTH, -1); // 음수를 넣으면 전으로 간다 후가 아니라
    
    // 어제 날짜 수로
    // 각 날짜 구성요소를 추출하여 문자열로 바꾼다
    int yYear = yesterday.get(Calendar.YEAR); // 년
    int yMonth = yesterday.get(Calendar.MONTH) + 1; // 월: Java Calendar 객체에서 월은 0월부터 시작
    int yDay = yesterday.get(Calendar.DAY_OF_MONTH);// 일
    int yHour = yesterday.get(Calendar.HOUR_OF_DAY); // 24시제 시간
    int yMinute = yesterday.get(Calendar.MINUTE); // 분
    int ySecond = yesterday.get(Calendar.SECOND);
    
    StringBuffer sbYesterday = new StringBuffer();
    sbYesterday.append(yYear); // 년은 그대로 출력
    sbYesterday.append(yMonth < 10 ? ("0" + yMonth) : yMonth); // 월: 10 미만(한자리 뿐)이면 앞에 0 추가
    sbYesterday.append(yDay < 10 ? ("0" + yDay) : yDay); // 일: 10 미만(한자리 뿐)이면 앞에 0 추가
    sbYesterday.append(yHour < 10 ? ("0" + yHour) : yHour); // 시: 10 미만(한자리 뿐)이면 앞에 0 추가
    sbYesterday.append(yMinute < 10 ? ("0" + yMinute) : yMinute); // 분: 10 미만(한자리 뿐)이면 앞에 0 추가
    sbYesterday.append(ySecond < 10 ? ("0" + ySecond) : ySecond); // 초: 10 미만(한자리 뿐)이면 앞에 0 추가
    
    String strYesterday = sbYesterday.toString();
    
    // 오늘 날짜 수로
    // 날짜를 수로 바꾸는 가장 간단한 방법
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.KOREA);
    String strToday = sdf.format(today.getTime());
    strToday = strToday.replace("-", "").replace(" ", "").replace(":", "");// 위 날짜 문자열에서 군더더기 제거해 수만 남김
    
    System.out.println(strYesterday + " vs " + strToday);
    
    // 비교
    int compareTo = strYesterday.compareTo(strToday);
    if (compareTo < 0) {
        // 사전상 strYesterday가 strToday보다 앞인 경우
        System.out.println(strYesterday + "가 " + strToday + "보다 작다");
    } else if (compareTo == 0) {
        // 사전상 strYesterday와 strToday가 같은 경우
        System.out.println("둘 다 " + strYesterday + "네?");
    } else {
        // 사전상 strYesterday가 strToday보다 뒤인 경우
        System.out.println(strYesterday + "가 " + strToday + "보다 크다");
    }
    
    // 수로 만들어 비교 이 경우 int형의 범위 한계로 long을 사용해야 함
    long intYesterday = Long.parseLong(strYesterday);
    long intToday = Long.parseLong(strToday);
    
    if (intYesterday < intToday) {
        // 사전상 strYesterday가 strToday보다 앞인 경우
        System.out.println(intYesterday + "가 " + intToday + "보다 작다");
    } else if (intYesterday == intToday) {
        // 사전상 strYesterday와 strToday가 같은 경우
        System.out.println("둘 다 " + intYesterday + "네?");
    } else {
        // 사전상 strYesterday가 strToday보다 뒤인 경우
        System.out.println(intYesterday + "가 " + intToday + "보다 크다");
    }


결과



번외
특정 기간 내인지 알려면 아래처럼 써보세요
// y 범위기간 최소, n 현재, t 범위기간 최대.
    // 조건은 최소 초과, 최대 미만
    if (y.compareTo(n) < 0 && n.compareTo(t) < 0) {
        System.out.println("범위 기간 안 입니다");
    } else {
        System.out.println("범위 기간 밖 입니다.");
    }


Comments