Java: 如何判断给定时间是否介于两次之间?
Java: How to check whether given time lies between two times?
我想检查目标时间是否位于两个给定时间之间,而不考虑使用 Java8 时间的日期。假设开始时间是 "21:30" ,结束时间是 "06:30" 并且目标时间是 " 03:00",所以程序应该 return 为真。
@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 是什么,您都将 return 为真。
所以更新 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.");
}
}
我想检查目标时间是否位于两个给定时间之间,而不考虑使用 Java8 时间的日期。假设开始时间是 "21:30" ,结束时间是 "06:30" 并且目标时间是 " 03:00",所以程序应该 return 为真。
@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 是什么,您都将 return 为真。
所以更新 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.");
}
}