Java에서 Comparable 인터페이스의 compareTo() 메서드를 사용하면 두 날짜를 손쉽게 비교할 수 있습니다. 이 메서드의 반환값은 다음과 같습니다.
- '0' 반환: 두 날짜가 동일한 경우
- '0보다 큰 값' 반환: date1이 date2보다 나중(이후) 날짜인 경우
- '0보다 작은 값' 반환: date1이 date2보다 먼저(이전) 날짜인 경우
문법(Syntax)
int compareTo(T o)
예제 코드
import java.text.*;
import java.util.Date;
public class CompareTwoDatesTest {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdformat = new SimpleDateFormat("yyyy-MM-dd");
Date d1 = sdformat.parse("2019-04-15");
Date d2 = sdformat.parse("2019-08-10");
System.out.println("The date 1 is: " + sdformat.format(d1));
System.out.println("The date 2 is: " + sdformat.format(d2));
if(d1.compareTo(d2) > 0) {
System.out.println("Date 1 occurs after Date 2");
} else if(d1.compareTo(d2) < 0) {
System.out.println("Date 1 occurs before Date 2");
} else if(d1.compareTo(d2) == 0) {
System.out.println("Both dates are equal");
}
}
}위 예제에서 날짜 d1(2019-04-15)은 d2(2019-08-10)보다 앞선 날짜이기 때문에, 콘솔에는 "Date 1 occurs before Date 2"가 출력됩니다.
실행 결과(Output)
The date 1 is: 2019-04-15 The date 2 is: 2019-08-10 Date 1 occurs before Date 2
참고: Java 8 이상에서의 현대적인 날짜 비교 방법
레거시 코드가 아닌 경우, Java 8부터 도입된 java.time 패키지의 LocalDate 클래스를 사용하는 것이 권장됩니다. 기존 Date 클래스는 스레드 안전성 문제와 불변성 부족 등의 단점이 있으며, LocalDate는 이러한 문제를 해결하고 더 직관적인 API를 제공합니다.
import java.time.LocalDate;
public class ModernDateCompareTest {
public static void main(String[] args) {
LocalDate d1 = LocalDate.of(2019, 4, 15);
LocalDate d2 = LocalDate.of(2019, 8, 10);
if(d1.isAfter(d2)) {
System.out.println("Date 1 occurs after Date 2");
} else if(d1.isBefore(d2)) {
System.out.println("Date 1 occurs before Date 2");
} else {
System.out.println("Both dates are equal");
}
}
}LocalDate는 isBefore(), isAfter(), isEqual()과 같은 가독성 높은 메서드를 제공하며, 내부적으로도 compareTo()를 지원하므로 상황에 맞게 선택하여 사용하면 됩니다.