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

如何最优处理日期时间解析异常?解析失败时设值为null

问题描述

以下是我的代码片段:

...
try {
    race.setDate(new Date(dateFormat.parse(entry[5]).getTime()));
    race.setTime(Time.valueOf(entry[6]));
    race.setFp1Date(new Date(dateFormat.parse(entry[8]).getTime()));
    race.setFp1Time(Time.valueOf(entry[9]));
    race.setFp2Date(new Date(dateFormat.parse(entry[10]).getTime()));
    race.setFp2Time(Time.valueOf(entry[11]));
    race.setFp3Date(new Date(dateFormat.parse(entry[12]).getTime()));
    race.setFp3Time(Time.valueOf(entry[13]));
    race.setQualiDate(new Date(dateFormat.parse(entry[14]).getTime()));
    race.setQualiTime(Time.valueOf(entry[15]));
    race.setSprintDate(new Date(dateFormat.parse(entry[16]).getTime()));
    race.setSprintTime(Time.valueOf(entry[17]));
} catch (ParseException e) {
    throw new RuntimeException(e);
}
...

当前try块中的每一行都可能抛出异常。根据需求,若entry[i]无法解析,对应的setter应将值设为null而非抛出异常。逐行添加try-catch块并非最优方案,且不想逐行检查entry[i]的值,请问该如何最优处理此场景?

解决方案

核心思路是将重复的解析逻辑封装为工具方法,让方法内部处理异常,解析失败时返回null,既避免冗余代码,又满足需求。

1. 封装日期解析方法

针对日期解析的逻辑,编写一个工具方法:

private Date parseDate(String dateStr, DateFormat dateFormat) {
    if (dateStr == null) {
        return null;
    }
    try {
        return new Date(dateFormat.parse(dateStr).getTime());
    } catch (ParseException e) {
        return null;
    }
}

2. 封装时间解析方法

针对Time类型的解析,编写对应的工具方法:

private Time parseTime(String timeStr) {
    if (timeStr == null) {
        return null;
    }
    try {
        return Time.valueOf(timeStr);
    } catch (IllegalArgumentException e) {
        return null;
    }
}

3. 重构原有代码

用工具方法替换原有的逐行解析逻辑,代码会变得简洁清晰:

race.setDate(parseDate(entry[5], dateFormat));
race.setTime(parseTime(entry[6]));
race.setFp1Date(parseDate(entry[8], dateFormat));
race.setFp1Time(parseTime(entry[9]));
race.setFp2Date(parseDate(entry[10], dateFormat));
race.setFp2Time(parseTime(entry[11]));
race.setFp3Date(parseDate(entry[12], dateFormat));
race.setFp3Time(parseTime(entry[13]));
race.setQualiDate(parseDate(entry[14], dateFormat));
race.setQualiTime(parseTime(entry[15]));
race.setSprintDate(parseDate(entry[16], dateFormat));
race.setSprintTime(parseTime(entry[17]));

方案优势

  • 消除了大量重复的try-catch代码,提升代码可读性与可维护性
  • 统一处理解析失败场景,所有解析出错的字段自动设为null
  • 无需手动检查entry[i]的空值情况,工具方法已提前处理

内容的提问来源于stack exchange,提问作者Rashmi Ranjan Bisoi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:45:32