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

ohtdti5x  于 2021-07-11  发布在  Java
关注(0)|答案(1)|浏览(159)

这个问题在这里已经有答案了

检查给定的时间是否介于两次之间(不考虑日期)(25个答案)
上个月关门了。
我想创建一个方法,告诉我是否在两个小时之间(即使我从不同的日子中选择小时),例如:

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

有什么简单而干净的方法可以做到这一点吗?

68de4m5k

68de4m5k1#

您可以使用localtime(因为您希望它独立于日期、时区或诸如此类的东西)。是的 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 实际上是在 after . 如果没有,那你就有这个案子。接下来,确定 now 是在 before 或者 after 然后将另一个重置为一天的开始( 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);
}

相关问题