无法格式化为XMLGregorianCalendar

时间:2015-12-07 01:29:17

标签: java xml spring datetime xsd

我从String date转换为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

1 个答案:

答案 0 :(得分:1)

你做不到。 XMLGregorianCalendar是一个(来自javadoc):

  

W3C XML Schema 1.0 Part 2, Section 3.2.7-14中规范定义的W3C XML Schema 1.0日期/时间数据类型的表示。

如您所见, dateTime 的引用规范性定义是:

  

3.2.7.1词汇表示

     

dateTime ·lexical space·由以下格式的有限长度字符序列组成:'-'? yyyy '-' mm '-' dd 'T' hh ':' mm ':' ss ('.' s+)? (zzzzzz)?

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

现在,如果您确实需要XML 日期值,而不是 dateTime ,那么您应该拨打newXMLGregorianCalendarDate(int year, int month, int day, int timezone)而不是newXMLGregorianCalendar(int year, int month, int day, int hour, int minute, int second, int millisecond, int timezone)。< / p>

输出将是:

2014-02-10