본문 바로가기

Programming/Java & JSP & Spring

[Java] 날짜 비교

날짜 순으로 정렬하는 문제에서 이용해야할 때가 종종 있다.


우선 SimpleDateFormat 으로 Date형식으로 만드는 것이 첫 번째 단계이다.


그 후, compareTo 함수를 사용하거나 getTime()을 이용해 long값 변환 후 비교하는 두 가지 방법이 있다.


1) Long 값으로 변환 후 비교


다음 코드는 ArrayList에 들어있는 객체 Edge들을 날짜를 비교해서 정렬하는 코드이다.

여기서 Edge.getTime() 함수는 Date.getTime()이라고 생각하면 된다.

Date.getTime()을 하면 Long타입의 데이터를 반환하게 되는데, 이를 비교하여 날짜를 정렬하는 방식이다.

"yyyy-MM-dd HH:mm:ss"의 형식으로 된 Date 타입을 비교할 때 유용한 것으로 보인다.

Collections.sort(list, new Comparator<Edge>() {
@Override
public int compare(Edge o1, Edge o2) {
if(o1.getTime() - o2.getTime() > 0){
return 1;
} else if(o1.getTime() - o2.getTime() < 0){
return -1;
} else {
return 0;
}
}
});




2) compareTo 함수 이용


위의 코드를 compareTo 함수를 이용하여 변형해보았다. HH:mm:ss 의 시간까지 비교해주는지는 확인못해봤지만

보통 이 방법을 많이 쓰는 것 같다.

a.compareTo(b) 의 경우 a가 크다면 1을 반환하고 b가 크다면 -1, 같다면 0을 반환한다.

이 때, a, b의 타입은 Date이다.

Collections.sort(list, new Comparator<Edge>() {
@Override
public int compare(Edge o1, Edge o2) {
return o1.day.compareTo(o2.day);
}
});