[Java] 날짜 비교, String에서 날짜 입력하는 방법


Development note/Java  2015.01.16 02:17

안녕하세요. 명월입니다.


이번 포스트의 내용은 공부하거나 알아둬야 하는 내용보다는 잘 아는 내용인데 막상 쓰려면 기억이 잘 안 나고 헷갈리는 날짜 비교이기에 다음에 보기 쉽게 정리해 놓은 글입니다.

Java에서는 날짜와 관계된 클래스가 많이 있으나 현재는 Util.Date만 기술되어 있습니다. (다른 클래스 내용도 추후 필요 때문에 추가될 수 있습니다)


Date 클래스에는 자체적으로 데이터를 비교할 수 있는 함수가 존재합니다.


예제로 확인해 보겠습니다.

import java.util.Calendar;
import java.util.Date;

public class DateExample {
  public static void main(String[] args){
    new DateExample();
  }
  public DateExample(){
    //비교일
    Calendar c = Calendar.getInstance();
    c.setTime(new Date());

    //기준일
    Date d = new Date();
    
    //현재날짜 : 현재날짜
    String out = Check(d,c.getTime());
    System.out.println(out);
    
    //현재날짜 : 현재날짜 2달전
    c.add(Calendar.MONTH,-2);
    out = Check(d,c.getTime());
    System.out.println(out);
    
    //현재날짜 : 현재날짜 1달후
    c.add(Calendar.MONTH, 3);
    out = Check(d,c.getTime());
    System.out.println(out);
    
    //예상데이터
    //날짜가 같습니다.
    //a가 b보다 날짜가 느립니다.
    //a가 b보다 날짜가 빠릅니다.
  }
  protected String Check(Date a,Date b){
    if(a.compareTo(b) > 0){
      return "a가 b보다 날짜가 느립니다.";
    }else if(a.compareTo(b) < 0){
      return "a가 b보다 날짜가 빠릅니다.";
    }else{
      return "날짜가 같습니다.";
    }
  }
}

저만 그럴지는 모르겠으나 가장 헷갈리는 compareTo 함수입니다. 0이 나오면 당연히 같은 날짜가 맞습니다.

변수1.compareTo(변수2)가 0보다 큰 경우는 변수1이 변수2보다 이후의 날짜입니다. 예로 변수1이 1월 15일 변수2가 1월 16일이면 compareTo값은 양수가 나옵니다.

변수1.compareTo(변수2)가 0보다 작은 경우는 변수1이 변수2보다 이전의 날짜입니다. 예를 들면 변수1이 1월 15일 변수2가 1월 14일이면 compareTo값은 음수가 됩니다.

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateExample2 {
  public static void main(String... args){
    try{
      new DateExample2();
    }catch(Throwable e){
      e.printStackTrace();
    }
  }
  public DateExample2() throws ParseException{
    
    Calendar c = Calendar.getInstance();
    c.setTime(new Date());
    //문자를 데이터형으로 변경
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    Date d = df.parse("2015-01-16");
    System.out.println(d);
             
    //데이터형에서 문자형으로 변경
    String buf = df.format(c.getTime());
    System.out.println(buf);
    
  }
}

어떻게 보면 프로젝트에서 가장 많이 사용되는 형태이면서 사용할 때마다 자주 까먹는 데이터 <-> 문자 형 변환 클래스입니다.


댓글 1개가 달렸습니다.
댓글쓰기
  1. 나그네
    2017.07.11 11:08 |  수정/삭제  댓글쓰기

    변수1.compareTo(변수2)가 0보다 큰 경우는 변수1이 변수2보다 이후의 날짜입니다. 예로 변수1이 1월 15일 변수2가 1월 16일이면 compareTo값은 양수가 나옵니다.
    변수.compareTo(변수2)가 0보다 작은 경우는 변수1이 변수2보다 이전의 날짜입니다. 예를 들면 변수1이 1월 15일 변수2가 1월 14일이면 compareTo값은 음수가 됩니다.

    위 부분에서 예를 드신 부분이 서로 반대로 된 것 같습니다. 확인해보시고 수정부탁드려요.