2012-01-11 15 views
8

Açılış saatleri hakkında bazı verilerim var Joda-Time kullanarak temsil etmeye çalışıyorum. Böyle bir gün bir görünümJoda-Time kullanarak kısmi aralıklarını nasıl ifade edebilirim?

tipik çalışma saatleri:

9'dan 12'ye kadar açık olan ve 13 ile Joda-Time varlıklar onları temsil için 20.

Benim asıl nedenden, etmektir onları doğrulamak açılış saatine hiçbir açık aralıkları ("9-12 ve 11-13" yasadışı) çakışanları

  • Kontrol (9, 12 öncesinde vb olan) geçerlidir

    • Kontrolü

    API akıllı, Interval dersiniz bu doğrulama yapmak için ihtiyaç yöntemleri vardır Joda-Time, ancak aralıklar tarih-saat-süreklisinde anlarının çiftleridir. Onları, mutlak zamandan bağımsız olarak, iki Yerel Zaman diliminin bir Aralığı gibi temsil etmek istiyorum. Mümkün mü?

  • +2

    Ben zaten iyi yanıtı ahbap sağladık düşünüyorum. Bunu, bir StartTimeRange ve bir 'LocalTime' sonu ile uygulardım ve bir gün için açık saatleri belirtmek için bir dizi var. – Gray

    cevap

    5

    İşte özel Timeınterval bir girişim var (hemen hemen çözüm gibi Gri yorumladı):

     
    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

    Evet, bu tür bir aralık sınıfını kendiniz yazmanız gerekiyor. BTW, toInterval() yönteminiz bozulur, çünkü geçerli anı iki kez alır (her toDateTimeToday'da bir kez). Gece yarısı tam olarak adlandırılırsa iki farklı tarihte geri dönebilir (bir yarış durumu). – JodaStephen

    +0

    İnceleme için teşekkürler, Stephen. Aralığı her zaman sabit bir tarihte değerlendirmek için kodu güncelledim. –

    İlgili konular