在XMLGregorianCalendar中指定日期格式

我想使用XMLGregorianCalendar格式的日期发送到Web服务。 Web服务需要yyyy-dd-mm格式的信息。 我使用下面的代码创建XMLGregorianCalendar并将其发送到Web服务。

 Date dob = null; DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); try { XMLGregorianCalendar date2; dob = df.parse("13/06/1983"); GregorianCalendar c = new GregorianCalendar(); c.setTimeInMillis(dob.getTime()); date2 = DatatypeFactory.newInstance().newXMLGregorianCalendar(c); System.out.println(date2); } catch(DatatypeConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch(ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } 

不幸的是,我总是得到1983-06-13T00:00:00.000-04:00的日期。 时间也包含在输出中。 是否有可能只获得约会? 你可以帮我吗?

你不需要指定“SimpleDateFormat”,它很简单:你必须指定你不想显示的常量“DatatypeConstants.FIELD_UNDEFINED”

 GregorianCalendar cal = new GregorianCalendar(); cal.setTime(new Date()); XMLGregorianCalendar xmlDate = DatatypeFactory.newInstance().newXMLGregorianCalendarDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH)+1, cal.get(Calendar.DAY_OF_MONTH), DatatypeConstants.FIELD_UNDEFINED); 

是的…

 Date dob=null; DateFormat df=new SimpleDateFormat("dd/MM/yyyy"); dob=df.parse( "13/06/1983" ); GregorianCalendar cal = new GregorianCalendar(); cal.setTime(dob); XMLGregorianCalendar xmlDate = DatatypeFactory.newInstance().newXMLGregorianCalendarDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH)+1, cal.get(Calendar.DAY_OF_MONTH), DatatypeConstants.FIELD_UNDEFINED); 

这将使其格式正确。

更简单地使用SimpleDateFormat,而不传递所有参数:

  String FORMATER = "yyyy-MM-dd'T'HH:mm:ss'Z'"; DateFormat format = new SimpleDateFormat(FORMATER); Date date = new Date(); XMLGregorianCalendar gDateFormatted = DatatypeFactory.newInstance().newXMLGregorianCalendar(format.format(date)); 

完整的例子。

注意:这仅用于删除最后两个字段:毫秒和时区,或者使用格式化程序yyyy-MM-dd删除整个时间组件。

对于任何格式,这都是一种简单的方法。 只需将其更改为所需的格式字符串

 XMLGregorianCalendar gregFmt = DatatypeFactory.newInstance().newXMLGregorianCalendar(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").format(new Date())); System.out.println(gregFmt);