2011-09-19 4 views
6

두 개의 제한없는 간격 (한 경계가있는 간격)이 겹치지 않거나 다를 수 있습니까?joda-lib와 오른쪽 경계가없는 시간 간격을 비교하십시오.

I이 시도 (및 다른 유사한 변형)했습니다

Instant now = new Instant(new Date().getTime()); 
Interval i2 = new Interval(now, (ReadableInstant) null); 
Interval i1 = new Interval(now, (ReadableInstant) null); 
boolean overlapping = i2.overlaps(i1); 

그러나 문서에 따르면, 두번째 파라미터 대신 "무한대"의 "현재"null 수단을 사용.

EDIT : 나는 this answer을 메일 링리스트에서 발견했습니다. 따라서 Joda에게는 불가능한 것 같습니다. 나는 대체 구현을 찾고있다.

+1

'의'** [반개 구간 (http://en.wikipedia.org/wiki/Half-open_interval#Terminology) **없는 똑같은 하나 개의 경계와 간격 "있는 그대로 무한대로. " '' –

+0

@Matt와 함께 질문을 편집했습니다. –

답변

4

모두 간격 t = -∞에서 시작, 또는 경우 모두 간격 t = +∞에 종료하는 경우, 그들은 것이다 항상 중복에 관계없이 시작일.

t = +∞에서 t = -∞ 간격에서 시작하고 A 간격 B 시작되면, 이들은
A.start > B.start
IFF에 중첩된다.

2

해키 솔루션 :

/** 
* Checks if two (optionally) unbounded intervals overlap each other. 
* @param aBeginn 
* @param aEnde 
* @param bBeginn 
* @param bEnde 
* @return 
*/ 
public boolean checkIfOverlap(LocalDate aBeginn,LocalDate aEnde, LocalDate bBeginn,LocalDate bEnde){ 
    if(aBeginn == null){ 
     //set the date to the past if null 
     aBeginn = LocalDate.now().minusYears(300); 
    } 
    if(aEnde == null){ 
     aEnde = LocalDate.now().plusYears(300); 
    } 
    if(bBeginn == null){ 
     bBeginn = LocalDate.now().minusYears(300); 
    } 
    if(bEnde == null){ 
     bEnde = LocalDate.now().plusYears(300); 
    } 

    if(aBeginn != null && aEnde != null && bBeginn != null && bEnde != null){ 
     Interval intervalA = new Interval(aBeginn.toDateTimeAtStartOfDay(),aEnde.toDateTimeAtStartOfDay()); 
     Interval intervalB = new Interval(bBeginn.toDateTimeAtStartOfDay(),bEnde.toDateTimeAtStartOfDay()); 
     if(intervalA.overlaps(intervalB)){ 
      return true; 
     } 
    } else{ 
     return false; 
    } 
    return false; 
} 
+1

이제 +/- 300 년 대신에이 최소 날짜를 사용할 수 있습니다 :'new LocalDate (-292_275_054, 1, 1);'(BC -292,275,054) 이 최대 날짜는 '새 LocalDate (292_278_993, 12, 31)'(연도 292,278,993 AD)로 사용할 수 있습니다. 이러한 제한은 [joda-time GregorianChronology 클래스] (http://grepcode.com/file/repo1.maven.org/maven2/joda-time/joda-time/2.7/org/joda/time/chrono/GregorianChronology)에 정의되어 있습니다. .java # GregorianChronology.0MIN_YEAR). –

1

내가 사용하는 것이 좋습니다 거라고 당신이 필요로하는 모든 구성 옵션 및 비교 기능을 제공한다 Range<DateTime> (from Guava).

Range<DateTime> r1= Range.atLeast(DateTime.now()); 
Range<DateTime> r2 = Range.atLeast(DateTime.now()); 
boolean overlap = r1.isConnected(r2) && !r1.intersection(r2).isEmpty(); 
관련 문제