Java如何解析mm:ss.S格式字符串为LocalTime,出现解析异常如何处理
解析mm:ss.S格式字符串为LocalTime的解决方案
错误原因
LocalTime 构造要求必须包含小时字段,你使用的mm:ss.S格式仅包含分钟、秒、毫秒三个字段,缺失小时值,因此解析时抛出无法构造LocalTime的异常。
解决方案
方案1:为格式化器配置默认小时值(推荐,无需修改输入字符串)
通过DateTimeFormatterBuilder给缺失的小时字段设置默认值0,即可正常解析:
import java.time.LocalTime; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatterBuilder; import java.time.temporal.ChronoField; public static LocalTime parseTime(String time) { DateTimeFormatter formatter = new DateTimeFormatterBuilder() .appendPattern("mm:ss.S") // 配置默认小时为0,代表当天0点的分秒时间 .parseDefaulting(ChronoField.HOUR_OF_DAY, 0) .toFormatter(); return LocalTime.parse(time, formatter); }
测试用例:输入"10:38.2"会被解析为00:10:38.200,符合预期。
方案2:业务为时长场景时使用Duration类型
如果你的字符串本质是代表时长而非当天时间(比如可能出现分钟超过59的情况,例如"62:15.3"代表62分15.3秒),则使用Duration类型更合理,解析方式如下:
import java.time.Duration; public static Duration parseDuration(String time) { // 转换为Duration支持的ISO 8601格式:PTxMyS String isoDuration = "PT" + time.replace(':', 'M') + "S"; return Duration.parse(isoDuration); }
内容的提问来源于stack exchange,提问作者Elisiejus
相关产品推荐
相关产品推荐

