LocalTime.of()用于构造无日期时间对象,参数范围:小时0–23、分钟0–59、秒0–59、纳秒0–999999999;非法值抛DateTimeException;适合整数分量场景,性能优于parse(),结果不涉时区且默认补零至纳秒精度。

LocalTime.of() 的基本用法和参数范围
LocalTime.of() 是 Java 8 引入的 java.time 包中构建无日期时间对象最直接的方式。它不依赖系统时钟,纯靠传入的数值构造,适合测试、固定时间配置或解析后组装。
注意:所有参数都必须在合法范围内,否则抛出 DateTimeException:
- 小时(hour):0–23
- 分钟(minute):0–59
- 秒(second):0–59
- 纳秒(nanoOfSecond):0–999_999_999(可选,省略则为 0)
例如:LocalTime.of(14, 30) 得到下午 2:30:00;LocalTime.of(23, 59, 59, 123) 表示 23:59:59.000000123。
常见错误:传入非法值导致 DateTimeException
这个异常是运行时抛出的,编译期不检查,容易在边界场景翻车:
立即学习“Java免费学习笔记(深入)”;
-
LocalTime.of(24, 0)→ 报错:“Hour must be between 0 and 23” -
LocalTime.of(12, 60)→ 报错:“Minute must be between 0 and 59” -
LocalTime.of(-1, 0)→ 同样触发异常
如果你从外部输入(如用户表单、配置文件)读取时间字段,务必先校验再调用 of(),不要依赖 try-catch 做主逻辑控制。
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
与 LocalTime.parse() 的选择依据
LocalTime.parse() 适合处理字符串格式的时间(如 "14:30" 或 "23:59:59.123"),而 of() 更适合已有整数分量的场景:
- 从数据库整型字段读取了 hour、min、sec 三列?直接
LocalTime.of(hour, min, sec) - 解析 JSON 中的
{"hour": 9, "minute": 15}?用of()比先拼字符串再 parse 更轻量、更安全 - 需要纳秒精度且数值已知?
of()支持第四个参数;parse()默认只到毫秒,要纳秒得配DateTimeFormatter
性能上,of() 是纯数值组装,无字符串解析开销,微基准下快一个数量级。
注意时区无关性与默认精度
LocalTime 本身不含时区信息,of() 构造的结果永远是“本地挂钟时间”的抽象表达,不绑定 UTC 或任何 ZoneId。别试图用它表示“UTC 14:30”——那该用 ZonedDateTime 或 OffsetTime。
另外,即使你只传两个参数(如 of(10, 30)),生成的对象内部仍包含秒和纳秒字段,只是值为 0。这意味着:
-
getSecond()返回 0 -
getNano()返回 0 - 它和
of(10, 30, 0, 0)完全等价,但后者更显式
这点在做时间比较或序列化时容易被忽略:看似“只有时分”,实际底层是完整精度结构。

















