Java 애플리케이션을 개발하다 보면 두 시간 값을 비교해야 하는 경우가 자주 발생합니다. 대표적인 방법은 두 가지로, Java 8부터 도입된 java.time API의 LocalTime 클래스를 사용하는 방법과, 전통적인 Date 클래스와 SimpleDateFormat을 사용하는 방법입니다. 각각의 방법을 예제와 함께 살펴보겠습니다.
1. LocalTime 클래스로 시간 비교하기
LocalTime 클래스는 시간대(time zone) 정보가 포함되지 않은 지역 시간을 나타냅니다. 이 클래스는 두 시간을 비교할 수 있도록 다음과 같은 메서드를 제공합니다.
isBefore()– 다른 시간보다 이전 시간인지 확인isAfter()– 다른 시간보다 이후 시간인지 확인isEqual()– 두 시간이 동일한지 확인
예제 코드
import java.time.LocalTime;
public class Test {
public static void main(String args[]) {
LocalTime time1 = LocalTime.of(10, 15, 45);
LocalTime time2 = LocalTime.of(7, 25, 55);
boolean bool1 = time1.isAfter(time2);
boolean bool2 = time1.isBefore(time2);
if (bool1) {
System.out.println(time1 + " 은(는) " + time2 + " 보다 이후의 시간입니다.");
} else if (bool2) {
System.out.println(time1 + " 은(는) " + time2 + " 보다 이전의 시간입니다.");
} else {
System.out.println(time1 + " 과(와) " + time2 + " 은(는) 같은 시간입니다.");
}
}
}
실행 결과
10:15:45 은(는) 07:25:55 보다 이후의 시간입니다.
2. Date와 SimpleDateFormat으로 시간 비교하기
문자열 형태의 시간 데이터를 비교해야 한다면, 먼저 SimpleDateFormat으로 문자열을 Date 객체로 변환한 뒤 after(), before(), equals() 메서드를 사용하면 됩니다.
오전/오후(AM/PM)가 포함된 12시간제 문자열을 다룰 때는 패턴을 hh:mm:ss a로 지정해야 하며, 영문 AM/PM을 안정적으로 파싱하기 위해 로케일을 함께 지정해 주는 것이 좋습니다.
예제 코드
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class CreateDateTime {
public static void main(String args[]) throws ParseException {
String timeStr1 = "8:27:45 AM";
String timeStr2 = "2:30:12 PM";
// SimpleDateFormat 인스턴스 생성 (영문 AM/PM 파싱을 위해 영어 로케일 지정)
SimpleDateFormat formatter = new SimpleDateFormat("hh:mm:ss a", Locale.ENGLISH);
// 문자열을 Date 객체로 변환
Date dateTime1 = formatter.parse(timeStr1);
Date dateTime2 = formatter.parse(timeStr2);
Boolean bool1 = dateTime1.after(dateTime2); // 이후 시간 여부
Boolean bool2 = dateTime1.before(dateTime2); // 이전 시간 여부
Boolean bool3 = dateTime1.equals(dateTime2); // 동일 시간 여부
if (bool1) {
System.out.println(timeStr1 + " 은(는) " + timeStr2 + " 보다 이후의 시간입니다.");
} else if (bool2) {
System.out.println(timeStr1 + " 은(는) " + timeStr2 + " 보다 이전의 시간입니다.");
} else if (bool3) {
System.out.println(timeStr1 + " 과(와) " + timeStr2 + " 은(는) 같은 시간입니다.");
}
}
}
실행 결과
8:27:45 AM 은(는) 2:30:12 PM 보다 이전의 시간입니다.
정리
새로 작성하는 코드라면 스레드에 안전하고 API가 직관적인 LocalTime 기반의 java.time 사용을 권장합니다. 반면 레거시 코드에서 Date 객체를 다뤄야 한다면 after(), before(), equals() 메서드로 손쉽게 비교할 수 있습니다. 상황에 맞는 방법을 선택해 시간 비교 로직을 깔끔하게 구현해 보시기 바랍니다.