LocalTime专用于表示不带日期和时区的纯时间,如“9:00”或“14:30:45.123”,适用于营业时间、打卡、定时任务等场景;其不可变,支持创建、比较、计算、格式化等操作。

LocalTime 专用于表示不带日期、不带时区的“纯时间”,比如早上9点、下午3:30:45.123,适合处理营业时间、打卡时间、定时任务触发点等场景。
创建和获取 LocalTime 实例
LocalTime 是不可变类,所有创建方法都返回新对象:
-
当前系统时间:
LocalTime now = LocalTime.now(); -
指定时分秒纳秒:
LocalTime.of(14, 30)(2:30 PM)、LocalTime.of(9, 0, 30, 500_000_000)(9:00:30.5) -
从字符串解析:
LocalTime.parse("13:45")、LocalTime.parse("08:15:30.123")(默认格式为 HH:mm[:ss[.SSS]]) -
从其他时间类型转换:如
LocalDateTime.now().toLocalTime()或Instant.now().atZone(ZoneId.systemDefault()).toLocalTime()
比较与判断时间关系
LocalTime 提供直观的比较方法,适合做营业时间校验、排班冲突检测等:
-
time1.isBefore(time2)、time1.isAfter(time2)、time1.equals(time2) -
time.compareTo(other)返回负数/0/正数,可用于排序(如按打卡时间升序) - 例如判断是否在工作时间段内:
LocalTime start = LocalTime.of(9, 0);<br> LocalTime end = LocalTime.of(18, 0);<br> LocalTime check = LocalTime.of(14, 20);<br> boolean inWorkHours = !check.isBefore(start) && !check.isAfter(end);
时间计算与调整
LocalTime 支持基于“时间量”的加减,但注意:它不自动跨天,超出范围会抛 DateTimeException(除非显式处理):
-
time.plusHours(2)、time.minusMinutes(45)、time.plus(Duration.ofSeconds(90)) - 安全跨天操作可结合
with或使用plus配合ChronoUnit:LocalTime t = LocalTime.of(23, 30);<br> LocalTime nextDay = t.plusHours(2); // 抛异常!<br> // 正确做法:先转成 LocalDateTime + 日期逻辑,或手动归一化<br> // 或用循环/条件处理:if (t.plusHours(2).isBefore(t)) → 跨天
- 常用调整器:
time.withHour(10)、time.withMinute(0)、time.truncatedTo(ChronoUnit.MINUTES)(去掉秒和纳秒)
格式化与解析自定义字符串
默认 toString() 输出形如 "14:30" 或 "09:05:30.123"。需自定义格式时用 DateTimeFormatter:
DateTimeFormatter f = DateTimeFormatter.ofPattern("HH:mm:ss");<br> String s = LocalTime.now().format(f); // 如 "16:20:45"LocalTime t = LocalTime.parse("08:45", DateTimeFormatter.ofPattern("HH:mm"));- 注意:模式字母大小写敏感(
HH是24小时制,hh是12小时制),且不含日期字段
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











