Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 시간까지 포함해 두 날짜를 비교하는 방법

Java에서 두 날짜를 단순히 연·월·일만이 아니라 시간(시, 분, 초)까지 포함하여 비교해야 하는 경우가 자주 있습니다. 이때 가장 권장되는 방법은 Java 8부터 도입된 java.time.LocalDateTime 클래스를 사용하는 것입니다.

1. LocalDateTime 클래스로 날짜·시간 비교하기

LocalDateTime 클래스는 시간대(time zone) 정보가 없는 현지(local) 날짜와 시간을 표현합니다. 기존의 Date 클래스를 대체할 수 있으며, 두 날짜·시간을 비교하기 위한 다양한 메서드를 제공합니다.

  • isBefore() – 현재 객체가 다른 날짜보다 이전인지 확인
  • isAfter() – 현재 객체가 다른 날짜보다 이후인지 확인
  • isEqual() – 두 날짜가 동일한지 확인

예제 코드

import java.time.LocalDateTime;

public class Test {
    public static void main(String args[]) {
        LocalDateTime dateTime1 = LocalDateTime.of(2007, 11, 25, 10, 15, 45);
        LocalDateTime dateTime2 = LocalDateTime.of(1999, 9, 12, 07, 25, 55);

        Boolean bool1 = dateTime1.isAfter(dateTime2);
        Boolean bool2 = dateTime1.isBefore(dateTime2);
        Boolean bool3 = dateTime1.isEqual(dateTime2);

        if(bool1){
            System.out.println(dateTime1 + " is after " + dateTime2);
        } else if(bool2){
            System.out.println(dateTime1 + " is before " + dateTime2);
        } else if(bool3){
            System.out.println(dateTime1 + " is equal to " + dateTime2);
        }
    }
}

실행 결과

2007-11-25T10:15:45 is after 1999-09-12T07:25:55

위 예제에서 dateTime1(2007년)이 dateTime2(1999년)보다 나중이므로 isAfter()가 true를 반환합니다.

2. SimpleDateFormat과 Date 클래스로 비교하기

문자열 형태의 날짜·시간 데이터를 다루는 경우에는 SimpleDateFormat으로 문자열을 파싱한 뒤, Date 객체의 비교 메서드를 활용할 수 있습니다.

  • after() – 해당 날짜가 다른 날짜보다 이후인지 확인
  • before() – 해당 날짜가 다른 날짜보다 이전인지 확인
  • equals() – 두 날짜가 동일한지 확인

예제 코드

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

public class CreateDateTime {
    public static void main(String args[]) throws ParseException {
        String dateTimeStr1 = "26-09-1989 8:27:45";
        String dateTimeStr2 = "12-11-2010 2:30:12";

        // SimpleDateFormat 객체 생성
        SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");

        Date dateTime1 = formatter.parse(dateTimeStr1);
        Date dateTime2 = formatter.parse(dateTimeStr2);

        Boolean bool1 = dateTime1.after(dateTime2);
        Boolean bool2 = dateTime1.before(dateTime2);
        Boolean bool3 = dateTime1.equals(dateTime2);

        if(bool1){
            System.out.println(dateTimeStr1 + " is after " + dateTimeStr2);
        } else if(bool2){
            System.out.println(dateTimeStr1 + " is before " + dateTimeStr2);
        } else if(bool3){
            System.out.println(dateTimeStr1 + " is equal to " + dateTimeStr2);
        }
    }
}

실행 결과

26-09-1989 8:27:45 is before 12-11-2010 2:30:12

정리

두 방식 모두 날짜와 시간을 함께 비교할 수 있지만, LocalDateTime은 불변(immutable) 객체로 스레드에 안전하고 API가 직관적이기 때문에 Java 8 이상 환경이라면 이를 사용하는 것이 좋습니다. 반면 레거시 코드나 오래된 라이브러리와의 호환이 필요하다면 SimpleDateFormatDate 조합도 여전히 유효한 선택입니다.