LocalTime.of() 是 Java 8 提供的静态工厂方法,用于根据指定时分秒及纳秒(0–999999999)创建无日期无时区的本地时间对象,参数需满足 hour(0–23)、minute(0–59)、second(0–59),越界抛 DateTimeException。

LocalTime.of() 是 Java 8 引入的 java.time 包中用于创建精确时间对象的核心静态工厂方法。它不依赖系统时钟,而是根据你传入的数值直接构造一个不含日期、不含时区的本地时间(LocalTime)实例。
掌握参数范围:避免 IllegalArgumentException
该方法有多个重载版本,最常用的是:
LocalTime.of(int hour, int minute, int second)LocalTime.of(int hour, int minute, int second, int nanoOfSecond)
各参数必须满足严格范围,否则抛出 DateTimeException(运行时异常):
- hour:0–23(24 小时制)
- minute:0–59
- second:0–59
- nanoOfSecond:0–999,999,999(纳秒精度,1 秒 = 10⁹ 纳秒)
例如:LocalTime.of(24, 0, 0) 或 LocalTime.of(12, 60, 0) 均非法;LocalTime.of(14, 30, 45, 123456789) 合法,表示 14:30:45.123456789。
立即学习“Java免费学习笔记(深入)”;
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
利用纳秒参数实现微秒/毫秒级精度
虽然日常开发中秒级已足够,但若需更高精度(如日志打点、性能测量),可借助第四个参数:
- 毫秒 → 乘以
1_000_000(如 123 毫秒 =123_000_000纳秒) - 微秒 → 乘以
1_000(如 456 微秒 =456_000纳秒) - 直接写纳秒值更直观,也避免整数溢出风险
示例:LocalTime.of(9, 15, 30, 500_000_000) 表示上午 9 点 15 分 30.5 秒。
注意:LocalTime 不处理时区与夏令时
LocalTime 仅代表“墙上时间”,不绑定任何时区或偏移量。它不关心此刻是否是夏令时、也不自动转换——这既是它的轻量优势,也是使用前提:
- 适合表示营业时间(如“09:00–18:00”)、闹钟设定、数据库中的纯时间字段
- 不适合计算跨时区事件、带时区的时间差或真实时刻推算
- 若需关联时区,请搭配
ZonedDateTime或OffsetTime
替代方式:从字符串解析更灵活(但非 of() 本意)
若时间数据来自用户输入或配置文件,推荐用 LocalTime.parse() 配合自定义格式器,而非硬编码 of() 参数:
-
LocalTime.parse("13:45:22")→ 默认 ISO_LOCAL_TIME 格式(HH:mm:ss) LocalTime.parse("01:45:22 PM", DateTimeFormatter.ofPattern("hh:mm:ss a"))
而 LocalTime.of() 的定位是**程序内精确、可控、无解析开销的构建**,适用于逻辑明确、数值已知的场景。

















