2016-02-04 7 views
5

के बीच कृपया सुझाव दें कि मेरा समय 2 LocalTime उदाहरणों के बीच है या एक अलग दृष्टिकोण का सुझाव देने के लिए कोई एपीआई समर्थन है या नहीं।java.time.LocalTime (अगले दिन)

मैं इस इकाई है:

class Place { 
    LocalTime startDay; 
    LocalTime endDay; 
} 

जो '17 तक '09:00' से यानी कार्य दिवस प्रारंभ और समाप्ति समय संग्रहीत करता है,: तक: 00 '00, या '22 से एक नाइट क्लब' "05:00"।

मुझे Place.isOpen() विधि लागू करने की आवश्यकता है जो निर्धारित करता है कि कोई समय किसी स्थान पर खुला है या नहीं।

एक साधारण isBefore/isAfter यहां काम नहीं करता है, क्योंकि हमें यह भी निर्धारित करने की आवश्यकता है कि अंतिम समय अगले दिन है या नहीं।

बेशक, हम शुरुआत और समाप्ति के समय की तुलना कर सकते हैं और निर्णय ले सकते हैं, लेकिन मुझे अतिरिक्त तर्क के बिना कुछ चाहिए, बस एक साधारण between() कॉल करें। यदि इस उद्देश्य के लिए LocalTime पर्याप्त नहीं है, तो कृपया अन्य का सुझाव दें।

+4

पोस्ट कुछ है कि आप की कोशिश की है। आपको कैसे लगता है कि आप उस मामले को संभालेंगे जहां समापन समय "पहले" (तारीख को विचार किए बिना) शुरुआती समय है? – Tunaki

+1

"बेशक, हम दो बार तुलना कर सकते हैं, और निर्णय ले सकते हैं, लेकिन मुझे नहीं लगता कि यह अच्छा है।" आप ऐसा क्यों सोचते हैं? आप किस समाधान की तलाश में हैं? "अच्छा तरीका" परिभाषित करें। – Tunaki

उत्तर

7

यदि मैं सही ढंग से समझता हूं, तो आपको समापन समय (9-17) या अगले दिन (22-5) के रूप में उसी दिन के आधार पर दो मामलों को बनाने की आवश्यकता है।

यह बस हो सकता है:

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

धन्यवाद, यह वही है जो मैंने समाप्त किया था। हालांकि यह एक लोकप्रिय उपयोगकेस की तरह लगता है, और मैं सोच रहा था कि एपीआई से कोई समर्थन है या नहीं। या शायद कुछ संरचना जो उस अतिरिक्त दिन को स्टोर करेगी, एक समय में केवल एक तुलना करने के लिए। लेकिन अगर यह पता चला कि यह काम नहीं करेगा, क्योंकि आपको इनपुट समय पर भी 'अगले दिन' चीज़ को निर्धारित करने की आवश्यकता है। जीवन दर्द है :) मैं आपके उत्तर को समाधान के रूप में चिह्नित करूंगा। –

+1

मुझे नहीं लगता कि एक आसान तरीका है। – assylias

+0

संपादन के लिए धन्यवाद। –

0

यह मेरे लिए क्लीनर दिखता है:

if (start.isBefore(end)) { 
    return start.isBefore(date.toLocalTime()) && end.isAfter(date.toLocalTime()); 
} else { 
    return date.toLocalTime().isAfter(start) || date.toLocalTime().isBefore(end); 
} 
संबंधित मुद्दे