Java:
두 날짜 비교하기
How to:
import java.time.LocalDate;
import java.time.Period;
public class DateComparison {
public static void main(String[] args) {
LocalDate date1 = LocalDate.of(2023, 3, 15);
LocalDate date2 = LocalDate.now();
// Checking if two dates are equal
boolean isEqual = date1.isEqual(date2);
System.out.println("Dates equal: " + isEqual);
// Checking if one date is before another
boolean isBefore = date1.isBefore(date2);
System.out.println("Date1 is before Date2: " + isBefore);
// Checking if one date is after another
boolean isAfter = date1.isAfter(date2);
System.out.println("Date1 is after Date2: " + isAfter);
// Calculating the period between two dates
Period period = Period.between(date1, date2);
System.out.println("Period: " + period.getYears() + " Years "
+ period.getMonths() + " Months " + period.getDays() + " Days");
}
}
출력 예시:
Dates equal: false
Date1 is before Date2: true
Date1 is after Date2: false
Period: 0 Years 0 Months 2 Days
Deep Dive
날짜 비교는 Java 8 이전에는 java.util.Date
와 java.util.Calendar
를 사용하여 수행했습니다. Java 8에서 java.time
패키지는 불변(immutable)인 LocalDate
, LocalDateTime
, Instant
클래스를 소개했고, 이는 더 강력하고 명확하며 사용하기 쉽습니다.
java.time.LocalDate
는 시간대 정보를 포함하지 않고 오직 날짜만을 나타냅니다. 그래서 단순한 날짜 비교에는 최적화된 클래스입니다. Period
클래스는 두 날짜 사이의 기간을 년, 월, 일 단위로 표현할 수 있게 합니다.
isEqual
, isBefore
, isAfter
메소드는 LocalDate의 인스턴스에 대한 간단하지만 강력한 비교 연산을 제공합니다.
하지만 java.time
패키지는 모든 상황에 대해 완벽한 것은 아닙니다. 시간대를 고려해야할 때는 ZonedDateTime
이 필요하며, 보다 복잡한 날짜 연산은 java.time.temporal
패키지를 사용하여 수행할 수 있습니다.