Java 配置侦听器窗口取决于时间

Java 配置侦听器窗口取决于时间,java,time,Java,Time,我想创建一个方法,告诉我是否在两个小时之间(即使我从不同的日子中选择小时) 例如: Current time: 20:00, start: 21:00, end: 23:00 -> returns false Current time: 22:00, start: 21:00, end: 23:00 -> returns true Current time: 01:00, start: 21:00, end: 8:00 -> returns true Current time:

我想创建一个方法,告诉我是否在两个小时之间(即使我从不同的日子中选择小时) 例如:

Current time: 20:00, start: 21:00, end: 23:00 -> returns false
Current time: 22:00, start: 21:00, end: 23:00 -> returns true
Current time: 01:00, start: 21:00, end: 8:00 -> returns true
Current time: 22:00, start: 21:00, end: 20:00 -> returns true
Current time: 05:00, start: 21:00, end: 4:00 -> returns false
有什么简单而干净的方法可以做到这一点吗?

您可以使用它(因为您希望它独立于白天、时区或类似的东西)。它有
isBefore
和类似的方法,使得这非常简单:

public static boolean isBetween(LocalTime before, LocalTime candidate, LocalTime after) {
    return before.isBefore(candidate) && candidate.isBefore(after);
}
用法很简单:

System.out.println(isBetween(LocalTime.of(20, 0), LocalTime.now(), LocalTime.of(23, 0));

编辑 似乎你真的需要另一种逻辑,允许每天重叠的范围。你的例子是:

Current time: 01:00, start: 21:00, end: 8:00 -> returns true
为了实现这一点,我将引入以下更改

首先,只需检查
before
是否实际在
before
之前,即可检测此事件。如果没有,那么你有这个案子。接下来,确定现在的<代码>是在<代码>之前的<代码>还是在<代码>之后的<代码>上,然后分别将另一个重置为一天的开始(
00:00
)或一天的结束(
23:59
)。之后,您可以通过正常方式再次进行比较,如前所示:

public static boolean isBetween(LocalTime before, LocalTime candidate, LocalTime after) {
    // Special handling for day-overlap
    if (before.isAfter(after)) {
        // Identify on which day candidate is and reset the other
        if (before.isBefore(candidate)) {
            after = LocalTime.MAX;
        } else {
            before = LocalTime.MIN;
        }
    }

    return before.isBefore(candidate) && candidate.isBefore(after);
}

查看并
我想创建一个方法,告诉我是否在两个小时之间(即使我从不同的日期中选择了小时)…有没有简单而干净的方法可以做到这一点?
-没有日期,最干净的方法就是在所有情况下返回
true
。尽管这里给出的答案比另一个问题下被接受的答案要好,但我还是选择以副本的形式结束。在那里有一个更彻底的,我相信值得你注意的。它不适用于第三种情况:)如果(endTime.isBefore(startTime)){return(now.isAfter(startTime)&&now.isBefore(LocalTime.of(23,59,59)))|(now.isBefore(endTime)&&now.isAfter(LocalTime.of)(0,0,0));}返回now.isAfter(startTime)和&now.isBefore(endTime)
@domvnski这是因为你的第三个案例不符合逻辑和你制定的规则。
21:00
不是在
01:00
之前。
01:00
我明白你的意图,但如果你想忽略天,这是不正确的逻辑。所以在这种情况下,你真的希望有天的逻辑。@domvnski我相应地编辑了我的帖子,向你展示了一个干净而真实的想法可读的方法。