Java: How to check whether given time lies between two times?

不羁岁月 提交于 2019-12-23 04:54:12

问题


I want to check whether target time lies between two given times without considering date using Java8 time. Let say if starting time is "21:30" , ending time is "06:30" and target time is "03:00", so program should return 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.");
        }
    }

回答1:


You've used LocalTime which doesn't store date information, only time. Then you are trying to check if target time is after start time (03:00 after 21:30). This statement is false.

Your start time should be before end time.

If you need to handle night shift try following:

    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.");
        }
    }



回答2:


in your scenario it seems that if startTime > endTime no matter what's targetTime you'll return true.

So update the if statement:

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


来源:https://stackoverflow.com/questions/44518534/java-how-to-check-whether-given-time-lies-between-two-times

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!