java.time.format.DateTimeParseException解析'103545'索引2处报错问题问询
报错原因
你指定的日期解析格式为ddMMyyyy,要求待解析的字符串必须是8位长度,依次对应2位日、2位月、4位年。但实际传入的待解析字符串为103545,仅6位长度,解析到索引为2的位置时无法匹配预期的月份字段规则,因此抛出java.time.format.DateTimeParseException异常。
额外提示:你拿到的
103545符合HHmmss(时分秒)的6位格式特征,大概率是数据源取错字段,把时间值当成了日期值返回。
解决方案
- 先确认数据源返回的字段正确性:打印
thisDate的实际值,排查是否存在取数逻辑错误,错拿了时间字段而非日期字段。 - 若确认数据源返回的是日期值,根据实际格式调整解析规则:
- 如果日期格式为
ddMMyy(6位,年份取后两位),将格式化器修改为DateTimeFormatter.ofPattern("ddMMyy")即可,默认会将两位年份解析为2000-2099区间的年份,如需适配19xx年的场景可额外补充年份偏移配置。 - 如果日期格式为其他6位规则,比如
yyMMdd,对应将格式字符串调整为yyMMdd即可。
- 如果日期格式为
- 补充前置校验逻辑,避免非法输入直接抛出异常,示例代码如下:
String thisDate= mySession.getVariableField(myVariable).toString().trim(); // 前置校验:如果确认用ddMMyyyy的8位格式,先判断长度 if (thisDate.length() != 8) { // 此处可根据业务需求处理异常分支:打日志、返回默认值、抛出业务异常等 System.err.println("非法日期输入:" + thisDate + ",预期为8位ddMMyyyy格式字符串"); return; } DateTimeFormatter formatter = DateTimeFormatter.ofPattern("ddMMyyyy"); LocalDate theDate= LocalDate.parse(thisDate, formatter);
内容的提问来源于stack exchange,提问作者Marina
相关产品推荐
相关产品推荐

