자바 현재시간 비교 - jaba hyeonjaesigan bigyo


자바에서 날짜(시간)를 비교하는 방법

3가지 정도 소개해 보겠습니다.


1. after, before 사용 => ex) date1.after(date2)

2. compareTo 사용 => ex) date1.compareTo(date2)

3. getTime 사용 => ex) date1.getTime() < date2.getTime()


-----------------------------------------------------------------------------------------


1은 이전 게시물에 있으니 참고 바랍니다.]



2. compareTo()

- java.util.Date 클래스에 속해 있음

- int 형

- 파라미터 Date 형 필요

- date1.compareTo(date2) => date1이 date2보다 이후날짜이면 1을 반환, 그 반대의 경우 -1을 반환(date1, date2는 형      식(타입)이 같아야 한다.)

ex)


SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //cf. HH는 24시간, hh는 12시간 

Date start = null;

Date end = null;

Date now = new Date();


Date today = format.parse(format.format(now));

start = format.parse("2018-04-01 13:30:00");

end = format.parse("2018-06-01 17:00:00");


int compare = today.comparTo(start); // 

int compare2 = today.comparteTo(end); //


if(compare > 0){


}if else(compare >= 0 && compare2 < 0){


}else{


}



3. getTime()

- java.util.Date 클래스에 속해 있음

- long 형

- 부등호를 사용하여 조건문에서 비교 가능

ex)


String start = "20180524100500";

String end = "20180524100600";


SimpleDateFormat format = new SimpleDateformat("yyyyMMddHHmmss");


Date now = new Date();

Date start_t = format.parse(start);

Date end_t = format.parse(end);


if(now.getTime() < start_t.getTime()){


}else if(start_t.getTime() <= now.getTime() && now.getTime() < end_t.getTime()){


}else{


}


자바 현재시간 비교 - jaba hyeonjaesigan bigyo

 

 

 

 

JAVA 버전에 따라 날짜 비교하는 방법이 다릅니다.

 

 

 

 

 

JAVA8 이전


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 date2)

- 주어진 날짜가 매개변수로 전달받은 날짜와 같을 경우 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("2022-06-13 14:15:10");        
        Date date2 = formatter.parse("2022-06-13 14:15:11");        
        Date date3 = formatter.parse("2022-06-13 14: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

Calendar 클래스 역시 java.util.Date 클래스와 비슷한 메서드를 가지고 있습니다.

 

public boolean after(Object when)

- 주어진 날짜가 매개변수로 전달받은 날짜보다 클 경우 true를 리턴하게 됩니다.

 

public boolean before(Object when)

- 주어진 날짜가 매개변수로 전달받은 날짜보다 작을 경우 true를 리턴하게 됩니다.

 

public boolean equals(Object obj)

- 주어진 날짜가 매개변수로 전달받은 날짜와 같을 경우 true를 리턴하게 됩니다.

 

public int compareTo(Calendar calendar 2)

- 주어진 날짜가 매개변수로 전달받은 날짜와 같을 경우 0을 리턴

- 주어진 날짜가 매개변수로 전달받은 날짜보다 클 경우 양수를 리턴

- 주어진 날짜가 매개변수로 전달받은 날짜보다 작을 경우 음수를 리턴합니다.

 

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("2022-06-13 14:15:10");        
        Date date2 = formatter.parse("2022-06-13 14:15:11");        
        Date date3 = formatter.parse("2022-06-13 14: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    
        
    }
}

 

 

 

 

 

 

 

JAVA8 이후


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(2022, 6, 13);        
        LocalDate date2 = LocalDate.of(2022, 6, 14);        
        LocalDate date3 = LocalDate.of(2022, 6, 14);         

        // 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

LocalDateTime 클래스도 LocalDate 클래스와 같이 날짜와 시간 비교를 위해 다음과 같은 메서드를 사용할 수 있습니다.

 

LocalDateTime

isAfter()

isBefore()

isEqual()

compareTo()

메서드는 날짜와 시간단위까지 비교할수 있습니다.

 

import java.time.LocalDateTime;

public class LocalDateTimeCompare {    
    public static void main(String[] args) {       

        LocalDateTime date1 = LocalDateTime.of(2022, 6, 13, 1, 12, 0);        
        LocalDateTime date2 = LocalDateTime.of(2022, 6, 13, 1, 12, 1);        
        LocalDateTime date3 = LocalDateTime.of(2022, 6, 13, 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 비교

LocalDate와 LocalDateTime을 비교할 땐, LocalDateTime을 LocalDate로 변환하여 비교할 수 있습니다.
그렇게 되면, 시간 정보는 무시하고, 날짜 정보만으로 두 객체의 날짜를 비교할 수 있습니다.

import java.time.LocalDate;
import java.time.LocalDateTime; 

public class LocalDateCompareLocalDateTime {     
    public static void main(String[] args) {     

        LocalDate date1 = LocalDate.of(2022, 6, 13);        
        LocalDateTime date2 = LocalDateTime.of(2022, 6, 13, 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     

    }
}

 

4. LocalDateTime에서 날짜, 시간, 분 단위로 비교

LocalDateTime의 truncatedTo() 메소드는 매개변수로 지정된 단위 이후의 값들을 버린 후,
복사한 LocalDateTime 객체를 리턴합니다.

 

이때, 매개변수로 전달되는 단위는 ChronoUnit 클래스에 지정된 상수를 사용하며 ,
DAYS보다 큰 단위인 YEARS, MONTHS 등의 값은 허용되지 않습니다.


매개변수로 DAYS보다 큰 단위를 전달하면 다음과 같은 exception이 발생합니다.

java.time.temporal.UnsupportedTemporalTypeException: Unit is too large to be used for truncation

 

아래 예제에서는 각 단위별로 비교를 하기 위해 truncatedTo() 메서드를 사용하여 
LocalDateTime 객체를 원하는 단위(일, 시간, 분)로 변환한 후 두 객체를 비교하였습니다.

import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit; 

public class LocalDateTimeTruncateCompare {    
    
    public static void main(String[] args) {         

        // 1. 일단위 비교        
        LocalDateTime date1 = LocalDateTime.of(2022, 6, 13, 1, 15, 0);        
        LocalDateTime date2 = LocalDateTime.of(2022, 6, 19, 4, 15, 30);         
        compareDay(date1, date2);         

        // 2. 시간 단위 비교        
        LocalDateTime date3 = LocalDateTime.of(2022, 6, 13, 4, 15, 0);        
        LocalDateTime date4 = LocalDateTime.of(2022, 6, 13, 4, 20, 30);         
        compareHour(date3, date4);         

        // 3. 분 단위 비교        
        LocalDateTime date5 = LocalDateTime.of(2022, 6, 13, 4, 15, 0);        
        LocalDateTime date6 = LocalDateTime.of(2022, 6, 13, 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;    
    }
}

 

반응형

공유하기

게시글 관리

구독하기무사뎀벨레의 블로그

'LANGUAGES > Back-End' 카테고리의 다른 글

[Spring] @RequestBody, @ResponseBody의 사용  (2)2022.10.06[JAVA] Log4j의 정의와 설정  (2)2022.09.06[JAVA] Get 방식과 Post 방식  (2)2022.06.03[JAVA] 현재 날짜, 시간 구하기  (2)2022.05.03[JAVA] Collection Framework(List, Queue, Set)과 MAP  (4)2022.03.31