【问题标题】:Cannot format to XMLGregorianCalendar [duplicate]无法格式化为 XMLGregorianCalendar [重复]
【发布时间】:2016-03-11 13:20:03
【问题描述】:

我将字符串日期转换为 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

【问题讨论】:

标签: java xml spring datetime xsd


【解决方案1】:

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

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

如您所见,dateTime 的参考规范定义是:

3.2.7.1 词法表示

dateTime·lexical space· 由以下形式的字符的有限长度序列组成:'-'? 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) 而不是 newXMLGregorianCalendar(int year, int month, int day, int hour, int minute, int second, int millisecond, int timezone)

然后输出将是:

2014-02-10

【讨论】:

  • 感谢您的回答!对我有帮助
猜你喜欢
  • 2018-05-22
  • 2012-03-03
  • 1970-01-01
  • 1970-01-01
  • 2019-06-15
  • 2021-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多