无法格式化为 XMLGregorianCalendar

Cannot format to XMLGregorianCalendar

我从字符串日期转换为 XMLGregorianCalendar

public static void convertStringToXMLDate(String dateString) {
    Date dob=null;
    DateFormat df=new SimpleDateFormat("yyyyMMdd");
    try {
        dob=df.parse( "20140210" );
    } catch (ParseException e) {
        e.printStackTrace();
    }
    GregorianCalendar cal = new GregorianCalendar();

    cal.setTime(dob);
    XMLGregorianCalendar xmlDate3;
    try {
        xmlDate3 = DatatypeFactory.newInstance().newXMLGregorianCalendar(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH)+1, cal.get(Calendar.DAY_OF_MONTH),dob.getHours(),dob.getMinutes(),dob.getSeconds(),DatatypeConstants.FIELD_UNDEFINED, DatatypeConstants.FIELD_UNDEFINED);
        System.out.println(xmlDate3);
    } catch (DatatypeConfigurationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

此代码打印 xmlDate3 = 2014-02-10T00:00:00。

如何在 XMLGregorianCalendar 中将其格式化为 20140210 或 2014/02/10

你不能。 XMLGregorianCalendar 是(来自 javadoc):

Representation for W3C XML Schema 1.0 date/time datatypes [...] normatively defined in W3C XML Schema 1.0 Part 2, Section 3.2.7-14.

如你所见,一个dateTime的引用规范定义是:

3.2.7.1 Lexical representation

The ·lexical space· of dateTime consists of finite-length sequences of characters of the form: '-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)? (zzzzzz)?

唯一可能的格式选择是在“词汇表示”和“规范表示”之间。您显示的格式(201402102014/02/10)对于 XML 架构定义的 dateTime 值无效。


现在,如果你真的想要一个 XML date 值,而不是 dateTime,那么你应该调用 newXMLGregorianCalendarDate(int year, int month, int day, int timezone) instead of newXMLGregorianCalendar(int year, int month, int day, int hour, int minute, int second, int millisecond, int timezone).

输出将是:

2014-02-10