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.Datejava.util.Calendar를 사용하여 수행했습니다. Java 8에서 java.time 패키지는 불변(immutable)인 LocalDate, LocalDateTime, Instant 클래스를 소개했고, 이는 더 강력하고 명확하며 사용하기 쉽습니다.

java.time.LocalDate는 시간대 정보를 포함하지 않고 오직 날짜만을 나타냅니다. 그래서 단순한 날짜 비교에는 최적화된 클래스입니다. Period 클래스는 두 날짜 사이의 기간을 년, 월, 일 단위로 표현할 수 있게 합니다.

isEqual, isBefore, isAfter 메소드는 LocalDate의 인스턴스에 대한 간단하지만 강력한 비교 연산을 제공합니다.

하지만 java.time 패키지는 모든 상황에 대해 완벽한 것은 아닙니다. 시간대를 고려해야할 때는 ZonedDateTime이 필요하며, 보다 복잡한 날짜 연산은 java.time.temporal 패키지를 사용하여 수행할 수 있습니다.

See Also