2010-11-28 10 views
3

자바에서 두 날짜를 비교하는 가장 좋은 방법은 무엇입니까?자바 날짜 시간 비교 두

는 지금은

10.00, 12.00, 2.00, 4.00

어떻게 우리가 다음 우리의 컴퓨터 시간에 비해 마련 할 시간을 확인할 수 있습니다

같은 시간의 배열을?

지금 내 컴퓨터 시간이 3.15라고 가정 해 봅시다. 4.00을 표시하려면 어떻게해야합니까?

Date date = new Date(); 

답변

12

java.util.Date는 Comparable 인터페이스를 구현합니다. 그것은 당신이 아주 쉽게 다음과 같은 코드를 가진 두 개의 날짜 객체를 비교할 수 있다는 것을 의미합니다 :

if (date1.compareTo(date2) < 0) 
{ 
     System.out.println("date1 is before date2"); 
} 
else if (date1.compareTo(date2) > 0) 
{ 
    System.out.println("date1 is after date2"); 
} 
else 
{ 
    System.out.println("date1 is equal to date2"); 
} 
5

나는 Joda Time을 사용합니다. 관심있는 각각의 시간에 대해 LocalTime을 만들고 오늘은 compareTo 또는 isBeforeisAfter과 비교할 수 있습니다. 현재 시간은 new LocalTime()입니다.

내장 된 Date/Calendar 클래스 대신 Joda Time을 사용하면 이러한 종류의 일에 대해 훨씬 더 읽기 쉬운 코드가 제공됩니다.

+0

인용구 : "날짜와 캘린더를 사용하면 고통과 고통을 겪습니다." – darioo

0

JodaTime 다음과 같은 질문에 대한 표준 해답이 될 것 같다,하지만 난 (웃기 의도 없음) 아직 확인에 시간이 없었어요

public static String getNextHour() { 
    Calendar c = new GregorianCalendar(); 
    int minsLeft = 60 - c.get(Calendar.MINUTE); 
    c.add(Calendar.MINUTE, minsLeft); 

    SimpleDateFormat sdf = new SimpleDateFormat("h:mm"); 
    return sdf.format(c.getTime()); 
} 
0

java.util.Date 클래스는 사용자의 요구에 잘못된 유형입니다 : Joda에서, 그래서 여기에 내 달력 제안입니다. 이 클래스는 날짜가 이고 시간이이고 시간 만 필요합니다. Java의 초기 버전에 번들로 제공되는 이전 날짜 시간 클래스 중에는 시간 값을 실제로 나타내는 아니요 클래스가 있습니다. java.sql.Time 클래스는이를 가장하지만 해킹입니다. java.time 프레임 워크는 나중에 자바 8에 내장되어

java.time. Oracle Tutorial을 참조하십시오. 이 수업은 매우 성공적인 Joda-Time 라이브러리에서 영감을 얻었습니다. java.time의 기능 중 상당수는 back-ported to Jave 6 & 7이며, 또 adapted to Android입니다. 이러한 클래스는 이전 날짜 - 시간 클래스를 대신합니다. a 광대 한 개선.

LocalTime 클래스는 날짜가없고 시간대가없는 시간을 나타냅니다.

값을 구성하려면 List과 같은 정렬 된 모음집을 사용하십시오.

List<LocalTime> times = new ArrayList<>(4); 
times.add(LocalTime.of(10 , 0); 
times.add(LocalTime.of(12 , 0); 
times.add(LocalTime.of(14 , 0); 
times.add(LocalTime.of(16 , 0); 

비교할 샘플 시간을 결정하십시오.

LocalTime sample = LocalTime.of(15 , 15); // Quarter-hour past 3 in the afternoon. 

또는 현재 시간을 확인하십시오. Specify a time zone은 JVM의 current default time zone에 따라 암시 적으로보다 안정적입니다.루프 List

ZoneId zoneId = ZoneId.of("America/Montreal"); 
LocalTime sample = LocalTime.now(zoneId); 

는 샘플 시간보다 하루 늦은 첫 번째 항목을 찾을 수 있습니다. 비교하려면 isAfter, isBefore 또는 equals 방법을 사용하십시오.

LocalTime hit = null; 
for (LocalTime time : times) { 
    if (time.isAfter(sample)) { 
     hit = time; 
     break; // Bail-out of this FOR loop. 
    } 
} 
// Test if 'hit' is still null, meaning no appropriate value found. 
if (null == hit) { … } else (… }