有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我想检查目标时间是否在两个给定时间之间,而不考虑使用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.");
        }
    }

共 (2) 个答案

  1. # 1 楼答案

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

    因此,请更新if语句:

    if (( startTime.isAfter(endTime) && targetTime.isBefore(startTime)
            && targetTime.isAfter(endTime)  )
         || ( startTime.isBefore(endTime) && targetTime.isBefore(endTime) 
            && targetTime.isAfter(startTime) )) {
    
  2. # 2 楼答案

    您使用的LocalTime不存储日期信息,只存储时间。 然后您尝试检查目标时间是否在开始时间之后(03:0021: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.");
            }
        }