2012-01-11 37 views
8

我有一些關於我想用Joda-Time表示的開放時間的數據。如何使用Joda-Time來表示局部間隔?

典型的開放時間一天看起來像這樣的:

公開賽9日至12日,從13到20

我的主要原因在喬達時間實體代表他們,是驗證它們:

  • 檢查的開放時間是有效的(圖9是12之前,等等)
  • 檢查沒有開間隔重疊(「9-12和11-13」是非法的)

API方式,Joda時間Interval類有我需要做的驗證方法,但區間是日期 - 時間連續區中的時間對。我想代表他們獨立於絕對時間,有點像兩個LocalTime部分的區間。這可能嗎?

+2

我想你已經提供了最好的答案傢伙。我將它作爲一個具有開始和結束的LocalTime的OpenTimeRange實現,然後使用它們的數組來指定一天的開放時間。 – Gray 2012-01-11 22:54:04

回答

5

下面是在自定義的TimeInterval所嘗試(很像解決灰色評論):

 
import org.joda.time.*; 

public class TimeInterval { 
    private static final Instant CONSTANT = new Instant(0); 
    private final LocalTime from; 
    private final LocalTime to; 

    public TimeInterval(LocalTime from, LocalTime to) { 
     this.from = from; 
     this.to = to; 
    } 

    public boolean isValid() { 
     try { return toInterval() != null; } 
     catch (IllegalArgumentException e) { return false;} 
    } 

    public boolean overlapsWith(TimeInterval timeInterval) { 
     return this.toInterval().overlaps(timeInterval.toInterval()); 
    } 

    /** 
    * @return this represented as a proper Interval 
    * @throws IllegalArgumentException if invalid (to is before from) 
    */ 
    private Interval toInterval() throws IllegalArgumentException { 
     return new Interval(from.toDateTime(CONSTANT), to.toDateTime(CONSTANT)); 
    } 
} 
+3

是的,您需要自己編寫這種間隔類。順便說一句,你的toInterval()方法被打破了,因爲它獲得當前時刻兩次(每次toDateTimeToday一次)。如果正好在午夜的每一側調用(競賽條件),它可以返回兩個不同的日期。 – JodaStephen 2012-01-12 12:09:52

+0

感謝審查,斯蒂芬。我更新了代碼,以便始終在固定日期評估Interval。 – 2012-01-12 15:56:36