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

使用GSON解析JSON日期转LocalDate时触发DateTimeParseException异常

问题根源与解决方案

你遇到的DateTimeParseException是因为获取startDate字符串时用错了方法!

看你的代码:

JsonPrimitive date = obj.getAsJsonPrimitive("startDate");
String dateString = date.toString(); // 这里就是出错的关键!

GSON的JsonPrimitive.toString()方法会把字符串类型的原始值额外包裹一层双引号,比如原本的"13.05.2018"会变成"\"13.05.2018\""(也就是带引号的字符串)。当你用dd.MM.yyyy格式去解析这个带引号的字符串时,索引2的位置是双引号,完全不符合日期格式规则,自然就抛出异常了。

而你处理endDate的时候用了date.getAsString(),这个方法才是正确获取原始字符串值的方式,不会额外添加引号,所以能正常解析。

修正后的代码

把startDate的获取方式改成和endDate一致,使用getAsString():

private List<LocalDate> getStartEndDate(String message){ 
    List<LocalDate> dates = new ArrayList<>(); 
    JsonObject obj = parseJson(message); 

    // 修正startDate的字符串获取逻辑
    JsonPrimitive startDatePrimitive = obj.getAsJsonPrimitive("startDate");
    String startDateString = startDatePrimitive.getAsString(); 
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); 
    dates.add(LocalDate.parse(startDateString, formatter)); 

    JsonPrimitive endDatePrimitive = obj.getAsJsonPrimitive("endDate");
    String endDateString = endDatePrimitive.getAsString(); 
    LocalDate end = LocalDate.parse(endDateString, formatter); 
    dates.add(end); 

    return dates; 
}

额外小建议

  • 可以把DateTimeFormatter定义成类的静态常量,避免每次调用方法都创建新实例,提升性能:
    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy");
    
  • 建议添加空值检查,避免obj.getAsJsonPrimitive()返回null时出现空指针异常,让代码更健壮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:11:05