Укажите формат даты в XMLGregorianCalendar

Я хочу использовать формат даты в XMLGregorianCalendar для отправки в веб-службу. Веб-служба ожидает информацию в формате yyyy-dd-mm. Я использую приведенный ниже код для создания XMLGregorianCalendar и отправки его в веб-службу.

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. Время также включается в выход. Можно ли получить только дату? Не могли бы вы помочь мне?

Ответы

Ответ 1

вам не нужно указывать "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);

Ответ 2

Да, понял...

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);

Это даст ему правильный формат.

Ответ 3

Гораздо проще использовать только 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.

Ответ 4

Это простой способ для любого формата. Просто измените его на требуемую строку формата

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