首先,我用Joda Time及其LocalTime
類型來表示時間。然後,你可以這樣做:
static boolean isInRange(LocalTime start, LocalTime end, LocalTime value) {
// Avoid equality problems - see description
if (value.equals(start) || value.equals(end)) {
return true;
}
if (start.compareTo(end) > 0) {
return !isInRange(end, start, value);
}
return start.compareTo(value) < 0 && value.compareTo(end) < 0;
}
換句話說,你一般只落得value
做最後的比較時,你會得到一個開始/結束範圍,其中start <= end
- 但如果你開始與其他然後你只是反轉做反向比較的結果。
換句話說,如果它的範圍是(上午2點,晚上10點)的而不是,則範圍內(10pm,2am)。
或者,你可以避開遞歸調用:
static boolean isInRange(LocalTime start, LocalTime end, LocalTime value) {
return start.compareTo(end) > 0
// Reversed: if it's earlier than the end point, or later than the start
? value.compareTo(end) <= 0 || start.compareTo(value) <= 0
: start.compareTo(value) <= 0 && value.compareTo(end) <= 0;
}
棘手位是平等的。上面的代碼假設開始/結束點都是包含在內的,不管怎麼樣。如果你想要其他的東西,你需要仔細考慮每一種情況。
您可能還需要詢問日期,否則向用戶說輸入範圍的消息將被視爲同一天。 – kosa
我同意Nambari,如果您沒有指定日期,那麼您可以檢查24小時標記上的重疊。一旦你有1天的時間,這會造成問題。 – calderonmluis