在XMLGregorianCalendar中指定日期格式

Dee*_*ika 21 java calendar gregorian-calendar

我想使用Date 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();
}
Run Code Online (Sandbox Code Playgroud)

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

小智 27

你不需要指定一个"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);
Run Code Online (Sandbox Code Playgroud)

  • 从Java 8开始,您应该使用:DatatypeFactory.newInstance().newXMLGregorianCalendar(c.get(Calendar.YEAR),c.get(Calendar.MONTH)+ 1,c.get(Calendar.DAY_OF_MONTH),DatatypeConstants.FIELD_UNDEFINED,DatatypeConstants .FIELD_UNDEFINED,DatatypeConstants.FIELD_UNDEFINED,DatatypeConstants.FIELD_UNDEFINED,DatatypeConstants.FIELD_UNDEFINED); (2认同)

Dee*_*ika 16

是的,它...

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);
Run Code Online (Sandbox Code Playgroud)

这将以正确的格式提供.

  • 在java.util.Calendar中,1月表示为0,因此每个月都会移1.不要问我为什么......人们推荐[Joda Time](http://www.joda.org/joda-time/ )它适合的地方.@Manu (5认同)

adi*_*van 9

更简单地使用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));
Run Code Online (Sandbox Code Playgroud)

完整的例子在这里.

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