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

使用java.time解析无'T'分隔符的日期时间字符串并提取LocalTime的问题

使用java.time解析无'T'分隔符的日期时间字符串并提取LocalTime的问题

嘿,这个问题我之前也碰到过,咱们一步步拆解来看:

首先为啥你第一个调用会报错?因为DateTimeFormatter.ISO_LOCAL_DATE_TIME这个预定义格式化器,严格遵循ISO 8601标准,要求日期和时间部分必须用T分隔,所以带空格的字符串就不符合它的格式规则,自然抛出DateTimeParseException。

那有没有现成的预定义常量能直接处理空格分隔的情况呢?很遗憾,Java标准库的java.time.format.DateTimeFormatter里没有提供这样的内置常量。不过不用慌,有两种既省心又符合你需求的替代方案:

方案一:先替换空格为'T',复用现有常量

这是最简单的办法,利用字符串替换把空格换成T,然后直接用ISO_LOCAL_DATE_TIME解析,最后提取LocalTime:

String input = "2023-05-10 09:41:00";
// 把空格替换成ISO标准要求的'T'
String adjustedInput = input.replace(' ', 'T');
LocalTime localTime = LocalTime.parse(adjustedInput, DateTimeFormatter.ISO_LOCAL_DATE_TIME);
System.out.println(localTime); // 输出:09:41:00

这种方式完全复用了官方预定义的格式化器,不用自己写格式模式,省心又不容易出错。

方案二:复用预定义格式组合新的格式化器

如果不想做字符串替换,也可以用DateTimeFormatterBuilder把现有的ISO_LOCAL_DATE和ISO_LOCAL_TIME组合起来,中间用空格分隔:

DateTimeFormatter formatter = new DateTimeFormatterBuilder()
        .append(DateTimeFormatter.ISO_LOCAL_DATE) // 复用预定义的日期格式
        .appendLiteral(' ') // 添加空格分隔符
        .append(DateTimeFormatter.ISO_LOCAL_TIME) // 复用预定义的时间格式
        .toFormatter();

LocalTime localTime = LocalTime.parse("2023-05-10 09:41:00", formatter);
System.out.println(localTime); // 输出:09:41:00

当然,如果你觉得Builder写法有点繁琐,也可以直接用简单的模式字符串:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalTime localTime = LocalTime.parse("2023-05-10 09:41:00", formatter);

这种写法更直观,模式字符串也很容易理解。

总结一下:如果想尽量复用官方预定义的常量,方案一是最优解;如果不想修改原字符串,方案二的两种写法都能满足需求,而且比完全自定义格式化器要省心~

备注:内容来源于stack exchange,提问作者mars8

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 11:57:59