0

需要助手,我需要将默认格式(2017-01-18)更改为XMLGregorianCalendar例如“20170118”,我在这里尝试了很多示例,但没有帮助

private static SimpleDateFormat formats = new SimpleDateFormat("yyyyMMdd");

public static XMLGregorianCalendar unmarshal(String value) {
    try {
        return toXMLGregorianCalendar(formats.parse(value));
    } catch ( ParseException e ) {
        e.printStackTrace();
        return null;
    }
}
4

1 回答 1

1

恐怕你不能那样做。如果您查看 class XMLGregorianCalendar,您会发现该toString()方法只是调用toXMLFormat()并且toXMLFormat()不提供任何格式自定义的可能性。

public String toXMLFormat() {

    QName typekind = getXMLSchemaType();

    String formatString = null;
    // Fix 4971612: invalid SCCS macro substitution in data string
    //   no %{alpha}% to avoid SCCS macro substitution
    if (typekind == DatatypeConstants.DATETIME) {
        formatString = "%Y-%M-%DT%h:%m:%s" + "%z";
    } else if (typekind == DatatypeConstants.DATE) {
        formatString = "%Y-%M-%D" + "%z";
    } else if (typekind == DatatypeConstants.TIME) {
        formatString = "%h:%m:%s" + "%z";
    } else if (typekind == DatatypeConstants.GMONTH) {
        formatString = "--%M" + "%z";
    } else if (typekind == DatatypeConstants.GDAY) {
        formatString = "---%D" + "%z";
    } else if (typekind == DatatypeConstants.GYEAR) {
        formatString = "%Y" + "%z";
    } else if (typekind == DatatypeConstants.GYEARMONTH) {
        formatString = "%Y-%M" + "%z";
    } else if (typekind == DatatypeConstants.GMONTHDAY) {
        formatString = "--%M-%D" + "%z";
    }
    return format(formatString);
}

有没有变通的解决方案?

好吧,如果你只想yyyyMMdd从一个XMLGregorianCalendar对象中获取一个类型的字符串,你可以这样做:

XMLGregorianCalendar c = YourCalendarHelper.unmarshal("2017-01-18");
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
String str = format.format(c.toGregorianCalendar().getTime());

System.out.println(str);  // 20170118

顺便说一句,如果在转换过程中出现异常,除非你知道你 100% 确定如何处理它,否则不要捕获它。通过方法声明抛出它,以便调用此方法的人知道潜在的失败。

于 2017-01-18T10:10:50.913 回答