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

如何从无日期的时间字符串中提取小时 解决点分隔格式解析异常

点分隔格式时间提取小时的实现方案

LocalTime默认使用HH:mm:ss的冒号分隔格式解析输入,点分隔的时间字符串不符合默认格式规则,因此会抛出解析异常。你可以根据自己的业务场景选择以下两种方案实现需求:

方案1:自定义DateTimeFormatter解析(推荐,带格式校验)

如果需要校验时间合法性,或后续需要对时间做其他运算操作,推荐通过自定义格式的解析器实现:

// 仅适配点分隔时间格式
DateTimeFormatter dotTimeFormatter = DateTimeFormatter.ofPattern("HH.mm.ss");
LocalTime localTime = LocalTime.parse("22.00.30", dotTimeFormatter);
int hour = localTime.getHour(); // 得到22

如果需要同时兼容冒号分隔、点分隔两种时间格式,可以用可选格式标记定义解析器:

// 同时适配22:00:30、22.00.30两种格式
DateTimeFormatter compatibleFormatter = DateTimeFormatter.ofPattern("HH[:][.]mm[:][.]ss");
LocalTime localTime = LocalTime.parse(你的时间字符串, compatibleFormatter);
int hour = localTime.getHour();

该方案会自动校验时间合法性,遇到25.00.30、22.61.30这类非法时间会提前抛出异常,避免脏数据进入后续流程。

方案2:字符串分割提取(轻量,适合确定输入格式合法的场景)

如果仅需要提取小时值,且能保证输入的时间字符串格式一定合法,可以直接通过字符串分割实现,逻辑更简单高效:

String timeStr = "22.00.30";
// 按点分割字符串,取第一个元素转整数即为小时值
int hour = Integer.parseInt(timeStr.split("\\.")[0]);

如果不能保证输入格式完全合法,可以先加一层正则校验再处理,避免数组越界或类型转换错误:

String timeStr = "22.00.30";
if (timeStr.matches("\\d{2}\\.\\d{2}\\.\\d{2}")) {
    int hour = Integer.parseInt(timeStr.split("\\.")[0]);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:45:08