상세 컨텐츠

본문 제목

[Java] 날짜 비교하기

JAVA

by 조응지 2021. 11. 21. 21:26

본문

Java API를 이용한 날짜비교하기

 

java8 이전버전에서 날짜와 시간을 다루는  java.util.Date 클래스와 java.util.Calendar 클래스는 사용하기에 직관적이지 않고 여러 문제점이 있어 java8부터는 API가 추가되었다.

Java8 이전의 문제점
- 시간대를 잘못 지정해도 오류를 발견하기 어려움.
- 불변객체가 아니여서 side-effect에 안전하지 않음.
- int 상수필드가 많아서 잘못 입력하더라도 컴파일 시점에 오류를 확인할 수 없음.
- 1월을 0으로 표현하기 때문에 실수를 많이 하게 됨.

 

Java 8 이후

- LocalDate

- LocalDateTime

 

Java 8 이전

- Date

- Calendar


1. LocalDate

public boolean isAfter(ChronoLocalDate other)

주어진 날짜가 , 파라미터로 전달받은 날짜보다 클 경우 true 리턴

public boolean isBefore(ChronoLocalDate other)

주어진 날짜가, 파라미터로 전달받은 날짜보다 작을 경우 true 리턴

public boolean isEqual(ChronoLocalDate other)

주어진 날짜가, 파라미터로 전달받은 날짜와 같은 경우 true 리턴

public int compareTo(ChronoLocalDate other)

주어진 날짜가, 파라미터로 전달받은 날짜와 같을 경우 0 , 클 경우 양수, 작을 경우 음수를 리턴

 

예시)

import java.time.LocalDate;

public class LocalDateCompare {
	public static void main(String[] args) {
    
		LocalDate date1 = LocalDate.of(2021, 11, 19);
		LocalDate date2 = LocalDate.of(2021, 11, 20);
		LocalDate date3 = LocalDate.of(2021, 11, 20);
        
		// isAfter()
		System.out.println(date1.isAfter(date2)); // false
		System.out.println(date2.isAfter(date3)); // false
		System.out.println(date2.isAfter(date1)); // true
        
		// isBefore()
		System.out.println(date1.isBefore(date2)); // true
		System.out.println(date2.isBefore(date3)); // false
		System.out.println(date2.isBefore(date1)); // false
        
		// isEqual()
		System.out.println(date1.isEqual(date2)); // false
		System.out.println(date2.isEqual(date3)); // true
		System.out.println(date2.isEqual(date1)); // false
        
		// compareTo()
		System.out.println(date1.compareTo(date2)); // -1
		System.out.println(date2.compareTo(date3)); // 0
		System.out.println(date2.compareTo(date1)); // 1
	}
}

 

2. LocalDateTime

public boolean isAfter(ChronoLocalDateTime<?> other)
public boolean isBefore(ChronoLocalDateTime<?> other)
public boolean isEqual(ChronoLocalDateTime<?> other)
public int compareTo(ChronoLocalDateTime<?> other)

LocalDate 클래스와 마찬가지로 날짜와 시간 비교를 위해 위와 같은 메소드를 사용할 수 있습니다.

LocalDateTime의 메소드들은 날짜와 시간단위까지 비교합니다.

 

예시)

import java.time.LocalDateTime;

public class LocalDateTimeCompare {
	public static void main(String[] args) {
		
        LocalDateTime date1 = LocalDateTime.of(2021, 11, 20, 1, 12, 0);
	LocalDateTime date2 = LocalDateTime.of(2021, 11, 20, 1, 12, 1);
	LocalDateTime date3 = LocalDateTime.of(2021, 11, 20, 1, 12, 1);
		
        // isAfter
	System.out.println(date1.isAfter(date2)); // false
	System.out.println(date2.isAfter(date3)); // false
	System.out.println(date2.isAfter(date1)); // true
		
        // isBefore
	System.out.println(date1.isBefore(date2)); // true
	System.out.println(date2.isBefore(date3)); // false
	System.out.println(date2.isBefore(date1)); // false
		
        // isEqual
	System.out.println(date1.isEqual(date2)); // false
	System.out.println(date2.isEqual(date3)); // true
	System.out.println(date2.isEqual(date1)); // false
		
        // compareTo
	System.out.println(date1.compareTo(date2)); // -1
	System.out.println(date2.compareTo(date3)); // 0
	System.out.println(date2.compareTo(date1)); // 1
        
	}
}

 

 

LocalDate와 LocalDateTime을 비교할 때에는, LocalDateTime를 LocalDate로 변환하여 비교할 수 있다.

그러면, 시간 정보는 무시하고 날짜 정보만으로 두 객체의 날짜를 비교할 수 있다.

 

3. Date

public boolean after(Date when)

주어진 날짜가, 파라미터로 전달받은 날짜보다 클 경우 true를 리턴

public boolean before(Date when)

주어진 날짜가, 파라미터로 전달받은 날짜보다 작을 경우 true를 리턴

public boolean equals(Object obj)​

주어진 날짜가, 파라미터로 전달받은 날짜보다 같을 경우 true를 리턴

public int compareTo(Date anotherDate)

주어진 날짜가, 파라미터로 전달받은 날짜보다 같을 경우 0, 클 경우 양수, 작은 경우 음수를 리턴

 

예시)

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

public class DateCompare {
	public static void main(String[] args) throws ParseException {
		
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		
        Date date1 = formatter.parse("2021-11-19 01:15:10");
	Date date2 = formatter.parse("2021-11-19 01:15:11");
	Date date3 = formatter.parse("2021-11-19 01:15:11");
		
        // after
	System.out.println(date1.after(date2)); // false
	System.out.println(date2.after(date3)); // false
	System.out.println(date2.after(date1)); // true
		
        // before
	System.out.println(date1.before(date2)); // true
	System.out.println(date2.before(date3)); // false
	System.out.println(date2.before(date1)); // false
		
        // equals
	System.out.println(date1.equals(date2)); // false
	System.out.println(date2.equals(date3)); // true
	System.out.println(date2.equals(date1)); // false
		
        // compareTo
	System.out.println(date1.compareTo(date2)); // -1
	System.out.println(date2.compareTo(date3)); // 0
	System.out.println(date2.compareTo(date1)); // 1
	
    }
}

 

4. Calendar

public boolean after(Object when)
public boolean before(Object when)
public boolean equals(Object obj)
public int compareTo(Calendar anotherCalendar)

Calendar도 Date와 비슷한 메소드들을 가지고 있다.

 

예시)

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

public class CalendarCompare {
	public static void main(String[] args) throws ParseException {
	
    	SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		
        Date date1 = formatter.parse("2021-06-19 01:15:10");
	Date date2 = formatter.parse("2021-06-19 01:15:11");
	Date date3 = formatter.parse("2021-06-19 01:15:11");
		
        // Calendar 객체 생성
	Calendar calendar1 = Calendar.getInstance();
	Calendar calendar2 = Calendar.getInstance();
	Calendar calendar3 = Calendar.getInstance();
	
    	calendar1.setTime(date1);
	calendar2.setTime(date2);
	calendar3.setTime(date3);
		
        // after
	System.out.println(calendar1.after(calendar2)); // false
	System.out.println(calendar2.after(calendar3)); // false
	System.out.println(calendar2.after(calendar1)); // true
	
    	// before
	System.out.println(calendar1.before(calendar2)); // true
	System.out.println(calendar2.before(calendar3)); // false
	System.out.println(calendar2.before(calendar1)); // false
	
  	// equals
	System.out.println(calendar1.equals(calendar2)); // false
	System.out.println(calendar2.equals(calendar3)); // true
	System.out.println(calendar2.equals(calendar1)); // false
	
    	// compareTo
	System.out.println(calendar1.compareTo(calendar2)); // -1
	System.out.println(calendar2.compareTo(calendar3)); // 0
	System.out.println(calendar2.compareTo(calendar1)); // 1
	
    }
}