Java DateTimeException: Unable to obtain LocalTime from TemporalAccessor 问题解决
在 Java 8 及以上版本的日期时间编程中,java.time.DateTimeException: Unable to obtain LocalTime from TemporalAccessor 是一个高频且容易踩坑的异常。尤其是在使用 DateTimeFormatter 解析日期时间字符串时,稍不注意就会触发这个错误。本文将从真实业务场景复现、根因剖析、解决方案三个维度,帮你彻底搞懂并解决这个问题。
一、场景复现
先看一个电商系统中常见的场景:解析用户提交的订单支付时间,业务要求只提取时间部分(时 - 分 - 秒),代码实现如下:
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
public class DateTimeExceptionDemo {
public static void main(String[] args) {
// 模拟用户提交的支付时间字符串(包含日期 + 时间)
String payTimeStr = "2026-01-21 15:30:45";
// 定义格式化器:仅匹配时间部分的格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
// 尝试解析字符串并转换为 LocalTime
LocalTime payTime = LocalTime.from(formatter.parse(payTimeStr));
System.out.println("订单支付时间:" + payTime);
}
}
运行这段代码,直接抛出如下异常:
Exception in thread "main" java.time.DateTimeException: Unable to obtain LocalTime from TemporalAccessor: {MinuteOfHour=30, SecondOfMinute=45, HourOfDay=15, NanoOfSecond=0},ISO resolved to 2026-01 of java...Parsed at java..LocalTime.from(LocalTime.java:) at com.example.DateTimeExceptionDemo.main(DateTimeExceptionDemo.java:)


