gpt4 book ai didi

java - JodaTime - 检查 LocalTime 是否在现在之后和现在在另一个 LocalTime 之前

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:45:55 29 4
gpt4 key购买 nike

我正在尝试检查当前时间是否在开始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");
}

有什么办法解决这个问题吗?

最佳答案

基本上你需要检查你的 startTimeendTime 是否颠倒了(即 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;
}
}
}

关于java - JodaTime - 检查 LocalTime 是否在现在之后和现在在另一个 LocalTime 之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22310329/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com