Java:如何检查给定的时间是否介于两次之间?

Java:如何检查给定的时间是否介于两次之间?,java,time,java-8,java-time,Java,Time,Java 8,Java Time,我想检查目标时间是否在两个给定时间之间,而不考虑使用Java8时间的日期。假设开始时间是“21:30”,结束时间是“06:30”,目标时间是“03:00”,那么程序应该返回true @Test public void posteNuit() { DateTimeFormatter format = DateTimeFormatter.ofPattern("HH:mm"); String s = "21:30"; Strin

我想检查目标时间是否在两个给定时间之间,而不考虑使用Java8时间的日期。假设开始时间是“21:30”,结束时间是“06:30”,目标时间是“03:00”,那么程序应该返回true

    @Test
    public void posteNuit()
    {
        DateTimeFormatter format = DateTimeFormatter.ofPattern("HH:mm");

        String s = "21:30";
        String e = "06:30";

        String t = "03:00";

        LocalTime startTime = LocalTime.parse(s, format);
        LocalTime endTime = LocalTime.parse(e, format);
        LocalTime targetTime = LocalTime.parse(t, format);

        if ( targetTime.isBefore(endTime) && targetTime.isAfter(startTime) ) {
            System.out.println("Yes! night shift.");
        } else {
            System.out.println("Not! night shift.");
        }
    }

在您的场景中,如果startTime>endTime,无论targetTime是什么,您都会返回true

    @Test
    public void posteNuit()
    {
        DateTimeFormatter format = DateTimeFormatter.ofPattern("HH:mm");

        String s = "21:30";
        String e = "06:30";

        String t = "03:00";

        LocalTime startTime = LocalTime.parse(s, format);
        LocalTime endTime = LocalTime.parse(e, format);
        LocalTime targetTime = LocalTime.parse(t, format);

        if ( targetTime.isBefore(endTime) && targetTime.isAfter(startTime) ) {
            System.out.println("Yes! night shift.");
        } else {
            System.out.println("Not! night shift.");
        }
    }
因此,请更新if语句:

if (( startTime.isAfter(endTime) && targetTime.isBefore(startTime)
        && targetTime.isAfter(endTime)  )
     || ( startTime.isBefore(endTime) && targetTime.isBefore(endTime) 
        && targetTime.isAfter(startTime) )) {

您使用的LocalTime不存储日期信息,只存储时间。 然后尝试检查目标时间是否在开始时间之后(
03:00
21:30之后)。这句话是假的

您的开始时间应该早于结束时间

如果您需要上夜班,请尝试以下操作:

    if (startTime.isAfter(endTime)) {
        if (targetTime.isBefore(endTime) || targetTime.isAfter(startTime)) {
            System.out.println("Yes! night shift.");
        } else {
            System.out.println("Not! night shift.");
        }
    } else {
        if (targetTime.isBefore(endTime) && targetTime.isAfter(startTime)) {
            System.out.println("Yes! without night shift.");
        } else {
            System.out.println("Not! without night shift.");
        }
    }

不管目标时间是什么,你的情况总是返回true,比如说如果目标时间是21:29,它应该返回false而不是true。我不明白。21:29应该归假,21:30应该归真?你能给出用例吗?因为可能问题没有被理解,所以写下了解决方案。g在21:30(09:30 PM)到06:30(06:30 AM)之间的任何给定时间,程序应该返回true,否则返回false。好的,让我试试你的条件。如果你不使用date,那么03:00总是在21:30之前。顺便说一句,你不需要显式的格式化程序
LocalTime.parse(“21:30”)
生成预期时间。这是因为您的时间字符串符合ISO 8601,这是
java.time
类的默认格式。但是,该格式允许可选的秒数和秒的小数,因此如果需要确保字符串中没有这些秒数,最好保留格式设置程序。@OleV.V。谢谢你告诉我。