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

使用Apache DateUtils.parseDate解析带时区日期字符串抛出ParseException如何解决

问题解决方案
  • 你之前使用的TZD不属于Java SimpleDateFormat的合法格式占位符,用单引号包裹的内容会被识别为固定字符串,无法匹配动态的时区偏移量,因此解析失败。
  • 你测试的格式中用到的YYYY是周年纪年规则、hh是12小时制规则,均不符合你的输入串对应的日期属性,也会导致解析错误。

你的输入串"2021-09-11T12:02:50-06:00Z"属于带时区偏移的ISO 8601格式,其中-06:00是西6区的时区偏移,末尾的Z为固定后缀。

如果你的Java版本 >= 7(支持XXX格式符匹配带冒号的时区偏移),正确的配置如下:

public static Date toDate (String dateString) throws ParseException {
    // 适配带-06:00偏移且末尾带Z的格式
    String DATETIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ssXXX'Z'";
    return DateUtils.parseDate(dateString, DATETIME_FORMAT);
}

如果你的输入串末尾的Z是笔误,实际为"2021-09-11T12:02:50-06:00"格式,直接去掉格式串中的'Z'即可:

public static Date toDate (String dateString) throws ParseException {
    String DATETIME_FORMAT = "yyyy-MM-dd'T'HH:mm:ssXXX";
    return DateUtils.parseDate(dateString, DATETIME_FORMAT);
}

补充注意事项

  • 如果使用Java 7以下版本,不支持XXX格式符,可以先对输入串做预处理,移除偏移量中的冒号后,使用yyyy-MM-dd'T'HH:mm:ssZ格式解析即可。
  • 如果你使用的Apache Commons Lang 3版本 >= 3.7,也可以直接使用内置的ISO格式工具,无需自定义格式串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:45:00