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

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

您的开始时间应该在结束时间之前。

如果您需要处理夜class,请尝试以下操作:

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

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

所以更新if语句:

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