2016-02-04 44 views
5

Lütfen zamanımın 2 LocalTime örnekleri arasında olup olmadığını belirlemek için bir API desteği olup olmadığını veya farklı bir yaklaşım önerdiğini önerin.java.time.LocalTime (sonraki gün)

bu varlık var:

'17 kadar '9:00' dan yani çalışma günü başlangıç ​​ve bitiş zamanı saklayan
class Place { 
    LocalTime startDay; 
    LocalTime endDay; 
} 

: 00' ya '22 gelen bir gece kulübünde: 00' kadar "05:00".

Yerin belirli bir zamanda açık olup olmadığını belirleyen bir Place.isOpen() yöntemini uygulamam gerekiyor. Basit bir isBefore/isAfter burada çalışmaz, çünkü bitiş saatinin bir sonraki gün olup olmadığını belirlememiz gerekir.

Tabii ki, başlangıç ​​ve bitiş zamanlarını karşılaştırabilir ve bir karar verebiliriz, ancak ek bir mantık olmadan bir şey istiyorum, sadece basit bir between() çağrısı. Bu amaç için LocalTime yeterli değilse, lütfen başka önerilerde bulunun.

+4

Mesaj şey. Kapanış zamanının “önce” (tarih göz önüne alınmadan) açılış saatinin olduğu durumu nasıl ele alacağınızı düşünüyorsunuz? – Tunaki

+1

"Elbette, iki kez karşılaştırabiliriz ve bir karar verebiliriz, ama bunun güzel olduğunu düşünmüyorum." Neden öyle düşünüyorsun? Hangi çözümü arıyorsunuz? "Güzel yol" tanımla. – Tunaki

cevap

7

Eğer doğru anlıyorsam, kapanış süresinin açılış saati ile aynı gün (9-17) mi yoksa sonraki gün (22-5) mi olduğuna bağlı olarak iki durum oluşturmanız gerekir.

Bu sadece olabilir:

public static boolean isOpen(LocalTime start, LocalTime end, LocalTime time) { 
    if (start.isAfter(end)) { 
    return !time.isBefore(start) || !time.isAfter(end); 
    } else { 
    return !time.isBefore(start) && !time.isAfter(end); 
    } 
} 
+0

Teşekkürler, ben bununla bittim. Ancak bu, popüler bir kullanıcı tabanı gibi görünüyor ve API'dan herhangi bir destek olup olmadığını merak ediyordum. Ya da belki de bu ekstra günü depolayacak bir yapı, bir seferde sadece bir karşılaştırma yapmak için. Ama eğer çözüldüyse, bu işe yaramayacaktır, çünkü bu 'ertesi gün' meselesini giriş süresinde de belirlemelisiniz. Hayat acıdır :) Cevabınızı çözüm olarak işaretleyeceğim. –

+1

Daha basit bir yol olduğunu düşünmüyorum. – assylias

+0

Düzenleme için teşekkür ederiz. –

0

Bu benim için daha temiz görünür: Eğer denedi

if (start.isBefore(end)) { 
    return start.isBefore(date.toLocalTime()) && end.isAfter(date.toLocalTime()); 
} else { 
    return date.toLocalTime().isAfter(start) || date.toLocalTime().isBefore(end); 
}