You need to enable JavaScript to run this app. Spring Boot中如何解决字符串转OffsetDateTime时索引0解析异常
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中如何解决字符串转OffsetDateTime时索引0解析异常

问题根因

LocalDateTime.parse() 无参数重载方法默认使用 ISO_LOCAL_DATE_TIME 规则解析字符串,要求日期部分必须为yyyy-MM-dd带分隔符格式,你传入的原始日期是yyyyMMdd无分隔符格式,且从报错信息看拼接后的时间字符串冒号后存在多余空格,完全不符合默认解析规则,因此抛出索引0位置解析失败的异常。

修复方案

自定义DateTimeFormatter匹配你拼接后的完整日期字符串格式,再用自定义格式化器完成解析即可。

修复后代码示例

// 先定义匹配日期格式的常量,以下格式匹配 20200723T00:00:00.00 格式的字符串
private static final DateTimeFormatter CUSTOM_DATE_PARSER = DateTimeFormatter.ofPattern("yyyyMMdd'T'HH:mm:ss.SSS");
// 注意修正DEFAULT_TIME里的多余空格,保证和上面的格式串完全匹配
private static final String DEFAULT_TIME = "T00:00:00.00";
// 替换为你业务实际使用的时区偏移
private static final ZoneOffset ZONE_OFF_SET_ACTIVATION_DATE = ZoneOffset.of("+8");

@Named("ofDate")
default OffsetDateTime mapPostedDate(KDto kDto){
    // 可按需添加非空校验
    String fullDateStr = kDto.getOfDate() + DEFAULT_TIME;
    LocalDateTime activationDate = LocalDateTime.parse(fullDateStr, CUSTOM_DATE_PARSER);
    return activationDate.atOffset(ZONE_OFF_SET_ACTIVATION_DATE);
}

注意事项

  • 如果你的DEFAULT_TIME不需要毫秒精度,可去掉格式串末尾的.SSS,保证格式串和实际拼接后的字符串完全一致即可
  • 时区偏移请替换为业务实际使用的偏移值,避免入库后日期出现时区偏差
  • 建议添加参数非空校验,避免kDto.getOfDate()为null时触发空指针异常

内容的提问来源于stack exchange,提问作者Jhon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 11:06:02