在 Java 8 之后的日期时间 API 中,LocalTime 用来表示不带日期的一天中的时间,比如 09:30 或 21:00。要判断当前时间是否超过营业时间,只需要拿到当前的 LocalTime,再和设定的营业结束时间比较,使用 isAfter 方法就能得出结果。

一、核心思路
营业时间通常是一个固定的时间段,例如早上 9 点到晚上 9 点。我们关心的是当前时间是不是已经过了晚上 9 点。LocalTime 的 isAfter 方法用于判断调用对象的时间是否晚于参数时间,返回布尔值。
- 获取当前时间:LocalTime.now()
- 定义营业结束时间:LocalTime.of(21, 0)
- 判断:currentTime.isAfter(closeTime)
二、基础代码示例
下面这段代码演示了如何判断当前是否超过晚上 9 点营业时间:
import java.time.LocalTime;
public class BusinessTimeCheck {
public static void main(String[] args) {
// 获取当前时间
LocalTime now = LocalTime.now();
// 设定营业结束时间为 21:00
LocalTime closeTime = LocalTime.of(21, 0);
// 判断当前时间是否晚于营业结束时间
if (now.isAfter(closeTime)) {
System.out.println("当前时间已超过营业时间");
} else {
System.out.println("仍在营业时间内");
}
}
}
三、处理带分钟的营业时间
如果营业结束时间是 21:30,只需要把 of 方法的分钟参数改为 30:
import java.time.LocalTime;
public class BusinessCheckWithMinute {
public static void main(String[] args) {
LocalTime now = LocalTime.now();
// 营业结束时间为 21:30
LocalTime closeTime = LocalTime.of(21, 30);
boolean isClosed = now.isAfter(closeTime);
System.out.println("是否已经打烊: " + isClosed);
}
}
四、常见注意点
1. 时区问题
LocalTime.now() 默认使用系统默认时区。如果服务部署在其它时区,需要显式传入时区,例如 LocalTime.now(ZoneId.of("Asia/Shanghai"))。
2. 边界时间
isAfter 是严格大于,如果当前时间正好等于营业结束时间,isAfter 会返回 false,表示还没超过。如果需要包含等于即视为打烊,可以改用 isAfter 配合 equals 或使用 compareTo。
3. 方法调用写法
注意 isAfter 是方法调用,不要写成标签形式,例如应写 now.isAfter(closeTime) 而不是 <isAfter> 这类错误形式。
五、封装为工具方法
实际项目中可以把判断逻辑抽成一个方法:
import java.time.LocalTime;
public class TimeUtil {
// 判断当前时间是否超过指定营业结束时间
public static boolean isPastBusinessTime(int hour, int minute) {
LocalTime now = LocalTime.now();
LocalTime closeTime = LocalTime.of(hour, minute);
return now.isAfter(closeTime);
}
}
通过上述方式,利用 LocalTime.isAfter 就能清晰、准确地判断当前时间是否超过营业时间,代码可读性高且不易出错。