You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用自定义DateTimeFormatter解析LocalDateTime遇DateTimeParseException求助

Java日期时间解析问题的解决方案

嗨,我来帮你拆解下这两个问题的核心原因和解决办法!

问题根源分析

你的代码里出现解析异常的核心原因是格式不匹配:

  • LocalDateTime.now().toString()输出的是ISO-8601标准格式,比如2019-09-19T14:42:23.837,日期和时间之间用大写字母T分隔;
  • 但你定义的格式化器是DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"),日期和时间之间用的是空格,所以解析器在索引10的位置(也就是T出现的地方)找不到预期的空格,直接抛出DateTimeParseException。

另外你提到的第二个问题(标注为LocalDate实际是LocalDateTime的解析错误),本质也是同样的格式不匹配问题——LocalDateTime的字符串格式和你的自定义格式化器不兼容。

修正方案

方案1:直接获取LocalDateTime(最推荐)

完全没必要把LocalDateTime.now()转成字符串再解析,这是多余的操作,直接赋值即可:

LocalDateTime timeStamp = LocalDateTime.now();

方案2:匹配格式后再解析

如果业务场景确实需要转字符串再解析,那要保证格式化器和字符串格式一致:
要么修改格式化器,匹配ISO标准的T分隔符:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS");
LocalDateTime timeStamp = LocalDateTime.parse(LocalDateTime.now().toString(), formatter);

要么把字符串里的T替换成空格,适配你的原格式化器:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
LocalDateTime timeStamp = LocalDateTime.parse(LocalDateTime.now().toString().replace("T", " "), formatter);

不过更推荐第一种方式,遵循标准格式更规范,也避免额外的字符串替换操作。

内容的提问来源于stack exchange,提问作者karvai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:38:52