如何从无日期的时间字符串中提取小时 解决点分隔格式解析异常
点分隔格式时间提取小时的实现方案
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
相关产品推荐
相关产品推荐

