일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 자바
- windows
- CSS
- 문자열
- string
- js
- ArrayList
- Array
- Maven
- table
- html
- CMD
- Visual Studio Code
- 이클립스
- 배열
- vscode
- Java
- IntelliJ
- Button
- input
- Files
- date
- 이탈리아
- list
- 자바스크립트
- 테이블
- Eclipse
- json
- 인텔리제이
- javascript
- Today
- Total
어제 오늘 내일
[Java] 날짜 비교하기 ( LocalDate, LocalDateTime, Date, Calendar) 본문
Java API를 이용하여 날짜와 시간을 다루는 방법을 알아보고 있습니다.
[Java] 문자열을 날짜로 변환하기 (Date, LocalDateTime)
[Java] 특정 날짜의 요일 구하기 (숫자, 영문, 한글)
이번에는, 2개의 날짜를 비교하는 방법을 알아보도록 하겠습니다.
Java 8 이후
- LocalDate
- LocalDateTime
- LocalDate와 LocalDateTime 비교하기
- LocalDateTime에서 년, 월, 일, 시간, 분 단위까지만 비교하기
Java 8 이전
- Date
- Calendar
Java 8 이후
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, 6, 19);
LocalDate date2 = LocalDate.of(2021, 6, 20);
LocalDate date3 = LocalDate.of(2021, 6, 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)
LocalDateTime 클래스도 LocalDate 클래스와 마찬가지로
날짜와 시간 비교를 위해 위와 같은 메소드를 사용할 수 있습니다.
LocalDateTime의 isAfter(), isBefore(), isEqual(), compareTo() 메소드는
날짜와 시간단위까지 비교합니다.
예제
import java.time.LocalDateTime;
public class LocalDateTimeCompare {
public static void main(String[] args) {
LocalDateTime date1 = LocalDateTime.of(2021, 6, 19, 1, 12, 0);
LocalDateTime date2 = LocalDateTime.of(2021, 6, 19, 1, 12, 1);
LocalDateTime date3 = LocalDateTime.of(2021, 6, 19, 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
}
}
3. LocalDate와 LocalDateTime 비교하기
import java.time.LocalDate;
import java.time.LocalDateTime;
public class LocalDateCompareLocalDateTime {
public static void main(String[] args) {
LocalDate date1 = LocalDate.of(2021, 6, 19);
LocalDateTime date2 = LocalDateTime.of(2021, 6, 19, 1, 23, 0);
System.out.println(date1.isEqual(date2.toLocalDate())); // true
System.out.println(date1.isBefore(date2.toLocalDate())); // false
System.out.println(date1.isAfter(date2.toLocalDate())); // false
}
}
LocalDate와 LocalDateTime을 비교할 때는
LocalDateTime을 LocalDate로 변환하여 비교할 수 있습니다.
그러면, 시간 정보는 무시하고, 날짜 정보만으로 두 객체의 날짜를 비교할 수 있습니다.
4. LocalDateTime에서 날짜, 시간, 분 단위로 비교하기
예제
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
public class LocalDateTimeTruncateCompare {
public static void main(String[] args) {
// 1. 일단위 비교
LocalDateTime date1 = LocalDateTime.of(2021, 6, 19, 1, 15, 0);
LocalDateTime date2 = LocalDateTime.of(2021, 6, 19, 4, 15, 30);
compareDay(date1, date2);
// 2. 시간 단위 비교
LocalDateTime date3 = LocalDateTime.of(2021, 6, 19, 4, 15, 0);
LocalDateTime date4 = LocalDateTime.of(2021, 6, 19, 4, 20, 30);
compareHour(date3, date4);
// 3. 분 단위 비교
LocalDateTime date5 = LocalDateTime.of(2021, 6, 19, 4, 15, 0);
LocalDateTime date6 = LocalDateTime.of(2021, 6, 19, 4, 15, 30);
compareMinute(date5, date6);
}
public static int compareDay(LocalDateTime date1, LocalDateTime date2) {
LocalDateTime dayDate1 = date1.truncatedTo(ChronoUnit.DAYS);
LocalDateTime dayDate2 = date1.truncatedTo(ChronoUnit.DAYS);
int compareResult = dayDate1.compareTo(dayDate2);
System.out.println("=== 일 단위 비교 ===");
System.out.println("date1.truncatedTo(ChronoUnit.DAYS) : " + dayDate1);
System.out.println("date2.truncatedTo(ChronoUnit.DAYS) : " + dayDate2);
System.out.println("결과 : " + compareResult);
return compareResult;
}
public static int compareHour(LocalDateTime date1, LocalDateTime date2) {
LocalDateTime dayDate1 = date1.truncatedTo(ChronoUnit.HOURS);
LocalDateTime dayDate2 = date1.truncatedTo(ChronoUnit.HOURS);
int compareResult = dayDate1.compareTo(dayDate2);
System.out.println("=== 시간 단위 비교 ===");
System.out.println("date1.truncatedTo(ChronoUnit.HOURS) : " + dayDate1);
System.out.println("date2.truncatedTo(ChronoUnit.HOURS) : " + dayDate2);
System.out.println("결과 : " + compareResult);
return compareResult;
}
public static int compareMinute(LocalDateTime date1, LocalDateTime date2) {
LocalDateTime dayDate1 = date1.truncatedTo(ChronoUnit.MINUTES);
LocalDateTime dayDate2 = date1.truncatedTo(ChronoUnit.MINUTES);
int compareResult = dayDate1.compareTo(dayDate2);
System.out.println("=== 분 단위 비교 ===");
System.out.println("date1.truncatedTo(ChronoUnit.MINUTES) : " + dayDate1);
System.out.println("date2.truncatedTo(ChronoUnit.MINUTES) : " + dayDate2);
System.out.println("결과 : " + compareResult);
return compareResult;
}
}
date1.truncatedTo(ChronoUnit.DAYS);
date1.truncatedTo(ChronoUnit.HOURS);
date1.truncatedTo(ChronoUnit.MINUTES);
public LocalDateTime truncatedTo(TemporalUnit unit)
LocalDateTime의 truncatedTo() 메소드는
파라미터로 지정된 단위 이후의 값들을 버린 후,
복사한 LocalDateTime 객체를 리턴합니다.
이때, 파라미터로 전달되는 단위는 ChronoUnit 클래스에 지정된 상수를 사용하며,
DAYS보다 큰 단위인 YEARS, MONTHS 등의 값은 허용되지 않습니다.
파라미터로 DAYS보다 큰 단위를 전달하면 다음 exception이 발생합니다.
java.time.temporal.UnsupportedTemporalTypeException: Unit is too large to be used for truncation
위 예제에서는 각 단위별로 비교를 하기 위해서
truncatedTo() 메소드를 사용하여
LocalDateTime 객체를 원하는 단위(일, 시간, 분)로 변환한 후,
두 객체를 비교하였습니다.
Java 8 이전
1. Date
java.util.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-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");
// 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
}
}
2. Calendar
public boolean after(Object when)
public boolean before(Object when)
public boolean equals(Object obj)
public int compareTo(Calendar anotherCalendar)
Calendar 클래스 역시
java.util.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
}
}
Java API를 이용하여
날짜를 비교하는 방법을 알아보았습니다.
'IT > Java' 카테고리의 다른 글
[Java] Date <-> LocalDate, LocalDateTime 변환하기 (1) | 2021.06.20 |
---|---|
[Java] Date를 Calendar로, Calendar를 Date로 변환하기 (0) | 2021.06.20 |
[Java] 특정 날짜의 요일 구하기 (숫자, 영문, 한글) (0) | 2021.06.19 |
[Java] 문자열을 날짜로 변환하기 (Date, LocalDateTime) (1) | 2021.06.19 |
[Java] 두 개의 List를 비교하여, 서로 중복되는 값 찾기 (0) | 2021.06.18 |