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

SimpleDateFormat格式化XMLGregorianCalendar时MM-dd-yyyy报错如何解决

错误根因

DatatypeFactory.newXMLGregorianCalendar(String lexicalRepresentation) 方法对入参字符串的格式有强制要求,必须符合W3C XML Schema的日期规范,仅支持yyyy-MM-dd这类标准顺序的格式。你传入MM-dd-yyyy格式的字符串时,解析器会将前两位识别为年份,后续格式匹配失败,因此抛出IllegalArgumentException异常。

正确实现方案

你的需求本质是先将Date转为XMLGregorianCalendar对象,再将该对象格式化为MM-dd-yyyy格式的字符串,分两步实现即可:

步骤1:Date转XMLGregorianCalendar(无需绕字符串格式化,更稳定)

public static XMLGregorianCalendar convertToXMLGregorianCalendar(Date date) {
    try {
        GregorianCalendar gregorianCalendar = new GregorianCalendar();
        gregorianCalendar.setTime(date);
        return DatatypeFactory.newInstance().newXMLGregorianCalendar(gregorianCalendar);
    } catch (DatatypeConfigurationException e) {
        e.printStackTrace();
    }
    return null;
}

步骤2:将XMLGregorianCalendar格式化为MM-dd-yyyy字符串

public static String formatAsMmDdYyyy(XMLGregorianCalendar xmlCalendar) {
    if (xmlCalendar == null) {
        return null;
    }
    // 转换为Date对象后再做自定义格式化
    Date date = xmlCalendar.toGregorianCalendar().getTime();
    DateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy");
    // 如果需要固定时区可以加以下配置
    // dateFormat.setTimeZone(TimeZone.getTimeZone("GMT+8"));
    return dateFormat.format(date);
}

调用示例

public static void main(String[] args) {
    XMLGregorianCalendar xmlCalendar = convertToXMLGregorianCalendar(new Date());
    String result = formatAsMmDdYyyy(xmlCalendar);
    // 输出示例:08-05-2021
    System.out.println(result);
}

可选优化:Java 8及以上版本推荐使用线程安全的DateTimeFormatter替代SimpleDateFormat,示例如下:

private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("MM-dd-yyyy");

public static String formatAsMmDdYyyy(XMLGregorianCalendar xmlCalendar) {
    if (xmlCalendar == null) {
        return null;
    }
    LocalDate localDate = xmlCalendar.toGregorianCalendar().toZonedDateTime().toLocalDate();
    return localDate.format(FORMATTER);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 20:57:04