날짜 비교 방법
이번 포스팅은 Java에서 두 날짜를 비교하는 방법을 소개합니다.
Date 비교
java.util.Date 클래스는 날짜 및 시간을 밀리세컨드(ms; millisecond)로 나타냅니다. Date 클래스는 Date 객체끼리 비교할 수 있도록 몇 가지 메서드(compareTo(), equals(), before(), after())를 지원합니다.
Date.compareTo 메서드
Date 클래스에서 제공하는 compareTo() 메서드는 Date 객체를 인수로 전달받으며 compareTo() 메서드를 호출한 Date 객체와 값을 비교합니다. 값이 동일하면 0을 반환하고 호출한 Date 객체가 이전 날짜인 경우 0보다 작은 값을 반환합니다. 반대로 호출한 Date 객체가 이후 날짜인 경우 0보다 큰 값을 반환합니다.
만약 인수가 null인 경우 NullPointerException 예외가 발생합니다.
Date date1 = new Date(2020, 1, 1);
Date date2 = new Date(2020, 1, 1);
int result = date1.compareTo(date2);
if(result == 0)
System.out.println("동일한 날짜");
else if (result < 0)
System.out.println("date1은 date2 이전 날짜");
else
System.out.println("date1은 date2 이후 날짜");
[실행 결과]
동일한 날짜
참고로 Java 8부터 Date를 대신할 수 있는 LocalDate, LocalTime, LocalDateTime 등 다양한 클래스가 도입되었습니다. 그렇기 때문에 Java 8부터 Date 클래스의 생성자 및 일부 메서드는 사용되지 않습니다.
Date.before 메서드
Date.before() 메서드는 before() 메서드를 호출한 Date 객체가 인수로 전달된 Date 객체보다 이전 날짜인 경우 true를 반환합니다. 동일한 날짜이거나 이후 날짜인 경우 false를 반환합니다.
Date date1 = new Date(2022, 1, 1);
Date date2 = new Date(2022, 1, 15);
boolean result = date1.before(date2);
System.out.println(result);
[실행 결과]
true
Date.after 메서드
Date.after() 메서드는 after() 메서드를 호출한 Date 객체가 인수로 전달된 Date 객체보다 이후 날짜인 경우 true를 반환합니다. 동일한 날짜이거나 이전 날짜인 경우 false를 반환합니다.
Date date1 = new Date(2022, 1, 1);
Date date2 = new Date(2022, 1, 15);
boolean result = date1.after(date2);
System.out.println(result);
[실행 결과]
false
Date.equals 메서드
Date.equals() 메서드는 equals() 메서드를 호출한 Date 객체와 인수로 전달된 Date 객체가 동일한 시점을 나타내는 경우 true를 반환하고 그렇지 않으면 false를 반환합니다.
Date date1 = new Date(2022, 1, 1);
Date date2 = new Date(2022, 1, 1);
boolean result = date1.equals(date2);
System.out.println(result);
[실행 결과]
true
참고로 Date.before(), Date.after(), Date.equals() 메서드는 인수가 null인 경우 NullPointerException 예외가 발생합니다.
LocalDate 비교
Java 8부터 날짜 및 시간과 관련된 다양한 클래스들이 도입되었습니다. Java 8 이전에 사용되었던 Date 클래스는 안전하지 않은 Null 처리, 불안전한 스레드 처리, 메서드의 부재 등 다양한 문제가 있었습니다.
새로 도입된 클래스에서 일반적으로 많이 사용되는 클래스는 날짜만 나타내는 LocalDate, 시간만 나타내는 LocalTime, 날짜 및 시간 둘 다 나타내는 LocalDateTime 클래스가 존재합니다.
이번 포스팅은 날짜를 비교하는 방법을 소개하므로 LocalDate 클래스에 대해서만 설명합니다.
LocalDate.compareTo 메서드
compareTo() 메서드를 호출한 LocalDate 객체와 인수로 전달된 LocalDate 객체와 비교합니다. compareTo() 메서드를 호출한 LocalDate 객체가 인수로 전달된 LocalDate 객체보다 이전 날짜인 경우 -1, 동일한 날짜인 경우 0, 이후 날짜인 경우 1을 반환합니다.
LocalDate date1 = LocalDate.of(2022, 1, 1);
LocalDate date2 = LocalDate.of(2022, 2, 1);
int result = date1.compareTo(date2);
System.out.println(result);
[실행 결과]
-1
LocalDate.equals 메서드
equals() 메서드는 equals() 메서드를 호출한 LocalDate 객체와 인수로 전달된 LocalDate 객체가 동일한 시점을 나타내는 경우 true를 반환하고 그렇지 않으면 false를 반환합니다.
LocalDate date1 = LocalDate.of(2022, 1, 1);
LocalDate date2 = LocalDate.of(2022, 2, 1);
boolean result = date1.equals(date2);
System.out.println(result);
[실행 결과]
false
LocalDate.isBefore, LocalDate.isAfter, LocalDate.isEqual 메서드
메서드를 호출한 LocalDate 객체가 인수보다 이전, 이후 또는 동일한지 비교하며 Boolean 값을 반환합니다.
LocalDate date1 = LocalDate.of(2022, 1, 1);
LocalDate date2 = LocalDate.of(2022, 2, 1);
System.out.println("isBefore(): " + date1.isBefore(date2));
System.out.println("isAfter(): " + date1.isAfter(date2));
System.out.println("isEqual(): " + date1.isEqual(date2));
[실행 결과]
isBefore(): true
isAfter(): false
isEqual(): false
Calendar 비교
Calendar는 달력과 관련된 클래스입니다. 달력도 날짜와 관련된 데이터를 가지고 있으므로 날짜를 비교할 수 있습니다.
Calendar c1 = Calendar.getInstance();
c1.set(2022, Calendar.MARCH, 15);
Calendar c2 = Calendar.getInstance();
c2.set(2022, Calendar.JULY, 10);
System.out.println("before(): " + c1.before(c2));
System.out.println("after(): " + c1.after(c2));
System.out.println("equals(): " + c1.equals(c2));
[실행 결과]
before(): true
after(): false
equals(): false
'Java' 카테고리의 다른 글
[Java]객체(Object)를 XML로 변환 (0) | 2022.04.11 |
---|---|
[Java]main 함수(메서드) (0) | 2022.04.10 |
[Java]현재 날짜 및 시간 가져오기 (0) | 2022.04.09 |
[Java]생성자 체인(Constructor Chaining) (0) | 2021.10.13 |
[Java]String 리터럴(Literal), String 객체(Object) (0) | 2021.05.12 |
댓글