解析CSV中mm:ss格式时间报java.time.format.DateTimeParseException如何解决
异常问题排查与解决
错误根源
你错误使用了LocalDateTime类型解析赛事时长:LocalDateTime是用于表示具体的日期时间点的类型,必须包含年、月、日、时、分、秒的完整时间点信息。而你要解析的30:27只有分钟和秒两个字段,缺少年、月、日、小时等必填字段,因此无法完成转换抛出解析异常。
解决方案
根据业务场景选择以下两种方案即可:
方案1:时长不超过1小时,用LocalTime存储
如果滑雪赛事时长不会超过1小时(即分钟数不会超过59),可以用表示一天内时间的LocalTime替代LocalDateTime:
- 先修改
Athlete类中skiTimeResults字段的类型,从LocalDateTime改为LocalTime - 修改解析代码:
LocalTime skiTimeResults = LocalTime.parse(athleteAttributes[3].trim(), DateTimeFormatter.ofPattern("mm:ss"));
LocalTime会自动补0作为小时值,可正常解析mm:ss格式的内容。
方案2:时长可能超过1小时,用Duration存储(更推荐)
如果时长可能超过1小时(会出现72:15这类分钟数大于60的格式),使用Java 8专门的时长类型Duration存储是最规范的做法:
- 先修改
Athlete类中skiTimeResults字段的类型,从LocalDateTime改为Duration - 修改解析代码:
String[] timeParts = athleteAttributes[3].trim().split(":"); int minutes = Integer.parseInt(timeParts[0]); int seconds = Integer.parseInt(timeParts[1]); Duration skiTimeResults = Duration.ofMinutes(minutes).plusSeconds(seconds);
该方案后续计算总时长、时长排序等操作都有原生API支持,不会出现溢出问题。
内容的提问来源于stack exchange,提问作者Darius Boengiu
相关产品推荐
相关产品推荐

