2016-02-04 6 views
5

私の時間が2 LocalTimeの間にあるかどうかを判断するためのAPIサポートがあるかどうかを提案するか、別の方法を提案してください。とjava.time.LocalTime(翌日)の間

私は、このエンティティを持っている:

'17まで「9時」からすなわち、作業日の開始時刻と終了時刻を格納0​​
class Place { 
    LocalTime startDay; 
    LocalTime endDay; 
} 

:00' または'22からのナイトクラブ:00' にまで"5:00"

私はPlace.isOpen()メソッドを実装して、所定の時間に場所が開いているかどうかを判断する必要があります。

単純なisBefore/isAfterは、終了時刻が翌日であるかどうかを判断する必要があるため、ここでは機能しません。

もちろん、開始時刻と終了時刻を比較して決定することができますが、追加のロジックを必要とせずに、単純なbetween()コールが必要です。 LocalTimeで十分でない場合は、他にお勧めします。

+4

ポストあなたがしようとしている何か。どのようにあなたは、閉鎖時間が "前"(日付を考慮せずに)開かれた時間を扱うと思いますか? – Tunaki

+1

"もちろん、私たちは2回比較して決定することができますが、これはいいとは思いません。"なぜそう思うの?どのような解決策を探していますか? "良い方法"を定義する。 – Tunaki

答えて

7

私が正しく理解している場合、閉鎖時間が開店時間(9-17)と同じ日にあるか、翌日(22-5)にあるかによって2つのケースを作成する必要があります。

それは単に次のようになります。

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

ありがとう、これは私が終わったものです。しかしこれは普及しているユースケースのように思えますが、APIからのサポートがあるかどうかは疑問でした。あるいは、その余分な日を保存するいくつかの構造は、一度に1つの比較を行うだけです。しかし、あなたが入力時にこの '次の日'のことを決定する必要があるので、これがうまくいきません。人生は苦痛です:)あなたの答えを解決策としてマークします。 –

+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); 
} 
関連する問題