[英]JodaTime - Check if LocalTime is after now and now before another LocalTime
我試圖檢查當前時間是否在啟動LocalTime
之后,另一端是LocalTime
,即開始時間加上11小時。 如果開始時間是11:00(結束時間是22:00),這可以正常工作。 但是,當我嘗試比較16:00的開始時間和03:00的結束時間時,將永遠不會記錄currentTime.isBefore(endTime)
,但它應該是。
LocalTime currentTime = LocalTime.now(); //21:14
LocalTime startTime = new LocalTime( 16, 00, 0, 0);
LocalTime endTime = startTime.plusHours(11); //03:00 Midnight
if(currentTime.isAfter(startTime)){
Log.v("Test", "After startTime");
}
if(currentTime.isBefore(endTime)){
Log.v("Test", "Before endTime");
}
任何想法如何解決這個問題?
基本上你需要檢查你的startTime
和endTime
是否被反轉(即endTime
是否在startTime
之前)。 如果是,那必須是“夜間”間隔,你應該把它看作是反過來的,並反轉結果。
public boolean isWithinInterval(LocalTime start, LocalTime end, LocalTime time) {
if (start.isAfter(end)) {
return !isWithinInterval(end, start, time);
}
// This assumes you want an inclusive start and an exclusive end point.
return start.compareTo(time) <= 0 &&
time.compareTo(end) < 0;
}
現在唯一奇怪的是,如圖所示,開始時間通常是包含的,結束時間是獨占的 - 而如果我們反轉結果(和參數),我們有一個包含的結束時間和一個獨占的開始時間。 因此,您可能希望明確處理這些案例:
public boolean isWithinInterval(LocalTime start, LocalTime end, LocalTime time) {
if (start.isAfter(end)) {
// Return true if the time is after (or at) start, *or* it's before end
return time.compareTo(start) >= 0 ||
time.compareTo(end) < 0;
} else {
return start.compareTo(time) <= 0 &&
time.compareTo(end) < 0;
}
}
(當然,您如何選擇用於compareTo
目標和參數取決於您。有多種方法可以有效地編寫相同的代碼。)
簡短而完整的例子:
import org.joda.time.LocalTime;
public class Test {
public static void main(String[] args) {
LocalTime morning = new LocalTime(6, 0, 0);
LocalTime evening = new LocalTime(18, 0, 0);
LocalTime noon = new LocalTime(12, 0, 0);
LocalTime midnight = new LocalTime(0, 0, 0);
System.out.println(isWithinInterval(morning, evening, noon)); // true
System.out.println(
isWithinInterval(morning, evening, midnight)); // false
System.out.println(
isWithinInterval(evening, morning, noon)); // false
System.out.println(
isWithinInterval(evening, morning, midnight)); // true
}
public static boolean isWithinInterval(LocalTime start,
LocalTime end,
LocalTime time) {
if (start.isAfter(end)) {
// Return true if the time is after (or at) start,
// *or* it's before end
return time.compareTo(start) >= 0 ||
time.compareTo(end) < 0;
} else {
return start.compareTo(time) <= 0 &&
time.compareTo(end) < 0;
}
}
}
LocalTime
就是那個時代 。
它不存儲日期,因此您的問題根本不可能。
如果你想計算幾天的時間,你需要得到一個日期,你需要提防DST。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.